Я хочу подписать запрос на подпись сертификата, используя закрытый ключ и сертификат, хранящийся в слоте цифровой подписи 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. Пожалуйста помоги.