Posiadam jakiś kod, który pisze klawisze klucz publicznego i prywatnego w żetonie. Z KeyPairu tworzę PKCS10, a później wygeneruj z niego plik certyfikatu. Plik certyfikatu zostanie wstawiony do tokena. Wszystko działa z powodzeniem, ale w jakiś sposób certyfikat nie może być odczytywany przez Capi lub Internet Explorer. Jeśli wstawię plik P12, biegnie bez zamieszania. Podejrzewam, że CKA_Label i CKA_ID jest tutaj winem. W P12 wszystko wykorzystuje tę samą konwencję nazwę. Z kontenera, klucza publicznego, klucza prywatnego i certyfikatu. Jednak w mojej metodzie nazwa pojemnika wygląda jak automatyczne wygenerowane. Jak mogę przekonwertować go na to samo z CKA_ID? Poniżej poniżej jest mój kod w generowaniu klapy, który oszczędzasz w kontenerze.

rv = g_pFunctionList->C_GenerateKeyPair(hSession,
        &ck_gen_ecc,
        tPubKey, sizeof(tPubKey) / sizeof(CK_ATTRIBUTE),
        tPrvKey, sizeof(tPrvKey) / sizeof(CK_ATTRIBUTE),
        &pkcs11_hPubKey, &pkcs11_hPrvKey); 

Zapisuje się w nazwie kontenerowej

cont_4440xxxxxxxx.

Jak zmienić nazwę kontenera jako dokładnie jako CKA_ID? Czy ktoś może pomóc?

1
Mace 20 lipiec 2020, 22:00

1 odpowiedź

Najlepsza odpowiedź

Jeśli Twoja biblioteka Cryptoki umożliwia, możesz zmienić nazwę wszystkich obiektów, ustawując nowe właściwości, wywołując funkcję C_SetAttributeValue.

W twoim przypadku może wyglądać tak:

        CK_ATTRIBUTE atAttr[2];

        atAttr[0].type = CKA_LABEL;
        atAttr[0].pValue = pLabelValue;    // <-- pass here new Label value pointer
        atAttr[0].ulValueLen = ulLabelLen; // <-- pass here new Label length

        atAttr[1].type = CKA_ID;
        atAttr[1].pValue = pIDValue;    // <-- pass here new ID value pointer
        atAttr[1].ulValueLen = ulIDLen; // <-- pass here new ID length

        rv = g_pFunctionList->C_SetAttributeValue(hSession, pkcs11_hPubKey, atAttr, 2);
        rv = g_pFunctionList->C_SetAttributeValue(hSession, pkcs11_hPrvKey, atAttr, 2);

0
Alexander 21 lipiec 2020, 10:20