Подписание запроса на подпись сертификата с помощью центра сертификации, хранящегося на Yubikey

Я хочу подписать запрос на подпись сертификата, используя закрытый ключ и сертификат, хранящийся в слоте цифровой подписи PIV.

Я использую последнюю версию OpenSC для MacOS (https://github.com/OpenSC/OpenSC/releases/tag/0.19.0).

Я пробовал pkcs11-tool, pkcs15-tool и yubikey-piv-tool. Все три инструмента предоставляют API --sign, но подписывают дайджест, созданный на основе данных.

Мое требование - подписать запрос на подпись сертификата для создания сертификата.

Единственный вариант, который у меня есть, - это использовать движок PKCS # 11 для OpenSSL. Движок PKCS # 11: brew install engine_pkcs11 Модуль PKCS # 11: opensc-pkcs11.so

Я подпишу CSR, используя обычные команды OpenSSL, дающие ключ и сертификат, хранящиеся на Yubikey, с использованием опции двигателя (возможно, с использованием URI PKCS # 11).

Используя OpenSSL 1.0.2, я попробовал следующую команду.

engine -t dynamic -pre SO_PATH:/usr/local/Cellar/engine_pkcs11/0.1.8/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/Library/OpenSC/lib/opensc-pkcs11.so

Ответ:

(dynamic) Dynamic engine loading support
[Success]: SO_PATH:/usr/local/Cellar/engine_pkcs11/0.1.8/lib/engines/engine_pkcs11.so
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: MODULE_PATH:/Library/OpenSC/lib/opensc-pkcs11.so
Loaded: (pkcs11) pkcs11 engine
     [ available ]

Чтобы подписать CSR, я использую эту команду,

req -engine pkcs11 -keyform engine -key 02 -new -x509 -in ~/Desktop/sample.csr -out cert.pem 

Ответ:

engine "pkcs11" set.
PKCS#11 token PIN:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields, there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []: a.com
Email Address []:
4536252012:error:8000A101:PKCS11 library:PKCS11_rsa_sign:User not logged in:p11_ops.c:131:
4536252012:error:0D0DC006:asn1 encoding routines:ASN1_item_sign_ctx:EVP lib:a_sign.c:306:

Даже при вводе правильного PIN-кода я получаю эту ошибку. Ключ / сертификат CA на сертификатах Yubikey также не имеют паролей.

Получена аналогичная ошибка в примере PyKCS # 11: https://github.com/LudovicRousseau/PyKCS11/issues/61

Другой похожей командой OpenSSL.

OPENSSL_CONF=engine.conf openssl x509 -req -engine pkcs11 -in ~/Desktop/sample.csr -CAkeyform engine -CAkey 02 -CA rootCA.pem -sha256 -out cert.pem

Ответ:

engine "pkcs11" set.
Signature ok
subject=/CN=C44F3320626D/C=IN/ST=MH/O=test
Getting CA Private Key
PKCS#11 token PIN:
4394223212:error:06067099:digital envelope routines:EVP_PKEY_copy_parameters:different parameters:p_lib.c:137:
4394223212:error:8000A101:PKCS11 library:PKCS11_rsa_sign:User not logged in:p11_ops.c:131:
4394223212:error:0D0DC006:asn1 encoding routines:ASN1_item_sign_ctx:EVP lib:a_sign.c:306:

Мне интересно, связана ли проблема с macOS OpenSSL, Yubikey, PKCS # 11 или OpenSSL-PKCS # 11.

Я ожидаю, что CSR будет подписан в сертификат на MacOS с помощью Yubikey. Пожалуйста помоги.


person Supreet    schedule 22.07.2019    source источник
comment
Попробуйте использовать XCA, который работает с Yubikey PIV (по крайней мере, в Linux). Удачи!   -  person vlp    schedule 23.07.2019


Ответы (1)


Ваш -CAkey 02 должен быть -CAkey slot_0-id_2 для слота 9c / index 02 на yubikey, все остальное выглядит нормально (хотя обратите внимание, что есть проблема с требованиями к контактам в слоте 9c, которые могут повлиять на вас).

Для рабочего примера yubikeys с pkcs # 11 вы можете проверить https://github.com/ryankurte/pki

Удачи!

person Ryan    schedule 12.11.2019
comment
-CAkey 02 работал в Linux. Проблема возникла в OSX, где brew install libp11 установил устаревшую версию на libp11. Репо ryankurte / pki полезно. - person Supreet; 18.11.2019