Существует ли способ создания подписи PKCS # 7 (S / MIME) с помощью HSM-устройства (считывателя карт), совместимого с PKCS # 11, с использованием чистого PHP, то есть без явного вызова команды оболочки, например, с помощью PHP OpenSSL библиотека или какой-то другой клей?
Я могу успешно создать подпись PKCS # 7 с помощью CLI openssl
с движком PKCS # 11 вот так:
putenv('PIN='.$secret_card_pin);
shell_exec("export PIN; OPENSSL_CONF=openssl.cnf openssl smime -sign -engine pkcs11 -md sha1 -binary -in {$tmpFileIn} -out {$tmpFileOut} -outform der -keyform engine -inkey id_ed0007 -signer pubcert.pem");
Я хочу очистить это, но это кажется невозможным, используя чистый PHP, потому что, насколько я могу судить openssl_pkcs7_sign () Функция может использоваться только с файлом закрытого ключа без какой-либо поддержки pkcs11-engine
предоставленные ключи. Я что-то пропустил?
Нет, в то время как для многих языков есть привязки PKCS # 11, для PHP нет ни одной.
Вам понадобится это, тогда вы сможете создать PKCS # 7 и подписать его с помощью этой библиотеки.
К сожалению, отсутствует, что вам нужно будет использовать CLI.
Других решений пока нет …