Исправление CKA_ID
Нужен пакет opensc и библиотека rtpkcs11ecp (из драйверов или из комплекта разработчика)
Запускаем утилиту pkcs11-tool, библиотеку указываем через параметр --module
Параметр -О дает нам список объектов, -l указывает, что нужен логин, а в --pin передаем пин-код
C:\Program Files\OpenSC Project\OpenSC\tools>pkcs11-tool.exe --module C:\Windows\System32\rtPKCS11ECP.dll -O -l --pin 12345678
MacBook-Kirill:~ m$ pkcs11-tool --module /Library/Aktiv\ Co/Rutoken\ ECP/lib/librtpkcs11ecp.dylib -O -l --pin 12345678 Using slot 0 with a present token (0x0) Public Key Object; GOSTR3410 PARAMS OID: 06072a850302022301 VALUE: 5fe400ff43fb74a9093e60c075d7c1a261da0b7f106144a13b869fc22fb1034e f43d02415eebb02b535c344de32a416b30229ec09b52d43c4ccd06cd2b2e9797 label: ID: 011111 Usage: verify Private Key Object; GOSTR3410 PARAMS OID: 06072a850302022301 label: ID: 011111 Usage: sign, derive Certificate Object; type = X.509 cert label: Rutoken Plugin ID: 011111
Например, мы считаем что “011111” это плохой ID и мы хотим его поменять
При этом необходимо сделать так, чтобы все CKA_ID были одинаковые
Нужно выполнить 3 последовательные команды, для закрытого ключа, для открытого и для сертификата
-y тип объекта, сертификат, закрытый ключ, и открытый ключ
-d старый CKA_ID
-e новый CKA_ID (нужно указывать в виде шестнадцатеричных чисел, 31 = это "1”)
MacBook-Kirill:~ m$ pkcs11-tool --module /Library/Aktiv\ Co/Rutoken\ ECP/lib/librtpkcs11ecp.dylib -l --pin 12345678 -y cert -d "011111" -e "313233" Using slot 0 with a present token (0x0) Result:Certificate Object; type = X.509 cert label: Rutoken Plugin ID: 313233
MacBook-Kirill:~ m$ pkcs11-tool --module /Library/Aktiv\ Co/Rutoken\ ECP/lib/librtpkcs11ecp.dylib -l --pin 12345678 -y privkey -d "011111" -e "313233" Using slot 0 with a present token (0x0) Result:Private Key Object; GOSTR3410 PARAMS OID: 06072a850302022301 label: ID: 313233 Usage: sign, derive
MacBook-Kirill:~ m$ pkcs11-tool --module /Library/Aktiv\ Co/Rutoken\ ECP/lib/librtpkcs11ecp.dylib -l --pin 12345678 -y pubkey -d "011111" -e "313233" Using slot 0 with a present token (0x0) Result:Public Key Object; GOSTR3410 PARAMS OID: 06072a850302022301 VALUE: 5fe400ff43fb74a9093e60c075d7c1a261da0b7f106144a13b869fc22fb1034e f43d02415eebb02b535c344de32a416b30229ec09b52d43c4ccd06cd2b2e9797 label: ID: 313233 Usage: verify
Теперь снова делаем просмотр объектов и убеждаемся что CKA_ID правильный и одинаковый у всех 3х объектов
MacBook-Kirill:~ m$ pkcs11-tool --module /Library/Aktiv\ Co/Rutoken\ ECP/lib/librtpkcs11ecp.dylib -O -l --pin 12345678 Using slot 0 with a present token (0x0) Public Key Object; GOSTR3410 PARAMS OID: 06072a850302022301 VALUE: 5fe400ff43fb74a9093e60c075d7c1a261da0b7f106144a13b869fc22fb1034e f43d02415eebb02b535c344de32a416b30229ec09b52d43c4ccd06cd2b2e9797 label: ID: 313233 Usage: verify Private Key Object; GOSTR3410 PARAMS OID: 06072a850302022301 label: ID: 313233 Usage: sign, derive Certificate Object; type = X.509 cert label: Rutoken Plugin ID: 313233