Создание ключей на токене
Подготовим токен.
$ pkcs15-init -E$ pkcs15-init --create-pkcs15 --so-pin"87654321"--so-puk""$ pkcs15-init --store-pin --label"User PIN"--auth-id02 --pin"12345678"--puk""--so-pin"87654321"--finalizeВ параметрах pin и so-pin можно указать желаемые пин-коды пользователя и администратора.
Создаем ключевую пару RSA длины 2048 бит c ID "45" (id стоит запомнить, он понадобится при создании сертификата). Аутентификация на токене происходит под сущностью пользователя.
$ pkcs15-init --generate-key rsa/2048--auth-id02 --id45<вводим PIN пользователя>Проверим сгенерированный ключ:
$ pkcs15-tool --list-keysUsing reader with a card: Aktiv Rutoken ECP 00 00Private RSA Key [Private Key]Object Flags : [0x3], private, modifiableUsage : [0x4], signAccess Flags : [0x1D], sensitive, alwaysSensitive, neverExtract,localModLength : 2048Key ref : 1 (0x1)Native :yesPath : 3f001000100060020001Auth ID : 02ID : 45Создание сертификата и импорт его на токен
Определите URI RFC7512 ключа:
p11tool --list-all ... pkcs11:model=PKCS%2315%20emulated;manufacturer=ZeitControl;...User%20PIN%29 pkcs11:model=PKCS%2315%20emulated;manufacturer=ZeitControl;...User%20PIN%29%28sig%29%29В нашем случае мы будем использовать вариант без
%28sig%29, я буду называть его$TOKEN_URI. Я буду использовать ключ аутентификации как личный. Нам нужно будет определить URI закрытого ключа, который мы хотим использовать. Для этого используйтеp11toolеще раз:~# p11tool --outfile=/tmp/p11_output --login --list-all $TOKEN_URIЭтот вывод будет содержать следующую информацию:
... Object 2: URL: pkcs11:model=PKCS%2315%20emulated;manufacturer=ZeitControl;...User%20PIN%29;id=%03;object=Authentication%20key;type=private Type: Private key (RSA-...) Label: Authentication key Flags: CKA_WRAP/UNWRAP; CKA_PRIVATE; CKA_NEVER_EXTRACTABLE; CKA_SENSITIVE; ID: 03 ...Нам понадобится
URLполе, которое я буду называть$KEY_URIТеперь у нас есть все необходимое для создания либо самозаверяющего сертификата, либо запроса на подпись сертификата (CSR), который будет отправлен в центр сертификации для подписи. Источник этой части — OpenSC wiki .
~# openssl req -engine pkcs11 -new -key "$KEY_URI" -keyform engine -x509 -out cert.pem -textСледуйте инструкциям мастера создания сертификата, отвечая на подсказки.