Apache не находит закрытый ключ, защищенный HSM через PKCS # 11

Я установил Apache на мою виртуальную машину Centos7 вместе с mod_ssl. Я пытаюсь заставить TLS работать с закрытым ключом, защищенным HSM через PKCS # 11, но когда я пытаюсь запустить Apache, он не находит мой закрытый ключ (см. Ошибку ниже). Также ничего не записывается в журналы нашей библиотеки PKCS # 11.

С другой стороны, если я попытаюсь использовать OpenSSL напрямую из командной строки с тем же URI PKCS # 11, он сможет взаимодействовать с серверной частью HSM и определить ключ. Также появляются журналы библиотеки PKCS # 11.

openssl rsautl -engine pkcs11 -keyform engine -inkey 'pkcs11:type=private?pin-value=121212;token=VendorPKCS11;id=%51' -sign -in myinputfile.txt -out myoutputfile.txt

Мне кажется, что Apache по какой-то причине не загружает нашу библиотеку PKCS # 11, и я не знаю почему. Я нашел это в Google, но он не был очень подробным.

Вот что я установил ...

/etc/httpd/conf.d/ssl.conf :

(Примечание: apachecert.pem самоподписывается с использованием закрытого ключа на HSM.)

Listen 443 https

SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin

SSLCryptoDevice pkcs11

<VirtualHost _default_:443>
    DocumentRoot "/var/www/html"
    ServerName myserver:443

    ErrorLog logs/ssl_error_log
    TransferLog logs/ssl_access_log
    LogLevel warn

    SSLEngine on

    SSLProtocol all -SSLv2 -SSLv3

    SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA

    SSLCertificateFile /etc/pki/tls/apachecert.pem
    SSLCertificateKeyFile "pkcs11:type=private?pin-value=121212;token=VendorPKCS11;id=%51"
</VirtualHost>

/etc/pki/tls/openssl.cnf:

openssl_conf = openssl_def
[openssl_def]
engines = engine_section
[engine_section]
pkcs11 = pkcs11_section
[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib64/openssl/engines/libpkcs11.so
MODULE_PATH = /etc/pki/tls/libVendorPKCS11.so
init = 0

/etc/pki/tls/VendorPKCS11.properties:

log.folder.path=/etc/pki/tls/p11logs
log.level=5
delay.between.auto.recovery.attempts=300
authentication.mode=TICKET
portal.server.list=node1
token.label=VendorPKCS11
token.manufacturer.id=Vendor
token.model=HSM Portal Token
token.serial.number=1
token.max.pin.length=1024
token.min.pin.length=1
token.hardware.version=1.0
token.firmware.version=1.0
slot.description=Vendor HSM Portal PKCS11
slot.manufacturer.id=Vendor
slot.hardware.version=1.0
slot.firmware.version=1.0
info.cryptoki.interface.version=2.20
info.manufacturer.id=Vendor
info.library.description=HSM Portal based PKCS11 library
info.library.version=2.0
credentials.user.name=username
portal.node1.uri=backendserver:8999
portal.node1.certificate.path=/etc/pki/tls/rootcer.pem
portal.node1.concurrent.clients=2
timeout.connection=15000
timeout.command=60000
timeout.keep.alive=600000

Ошибка, которую я вижу при попытке запустить Apache:

Oct 22 08:55:25 myserver systemd[1]: Starting The Apache HTTP Server...
Oct 22 08:55:25 myserver httpd[11013]: AH00526: Syntax error on line 112 of /etc/httpd/conf.d/ssl.conf:
Oct 22 08:55:25 myserver httpd[11013]: SSLCertificateKeyFile: file '/etc/httpd/pkcs11:type=private?pin-value=121212;token=VendorPKCS11;id=%51' does not exist or is empty
Oct 22 08:55:25 myserver systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
Oct 22 08:55:25 myserver kill[11015]: kill: cannot find process ""
Oct 22 08:55:25 myserver systemd[1]: httpd.service: control process exited, code=exited status=1
Oct 22 08:55:25 myserver systemd[1]: Failed to start The Apache HTTP Server.
Oct 22 08:55:25 myserver systemd[1]: Unit httpd.service entered failed state.
Oct 22 08:55:25 myserver systemd[1]: httpd.service failed.

Кто-нибудь знает, почему Apache не может найти библиотеку PKCS # 11 поставщика или, по крайней мере, какие-либо журналы не отображаются? Также мне кажется странным, что в выводе ошибок Apache что-то добавляет "/ etc / httpd /" перед URI PKCS # 11.

0
задан 25 October 2019 в 07:50
1 ответ

После того, как некоторые седые волосы, я понял, что PKCS#11 URIs только реализован в ответвлении разработки Apache (версия 2.5.1). Это не доступно в последней стабильной версии 2,4.

пересмотр включая эту функцию - это: https://svn.apache.org/viewvc? view=revision& revision=1830819

Поэтому на данный момент, чего я пытаюсь достигнуть, кажется, не возможен с Apache 2.4 и mod_ssl.

, Поскольку нечетные числа в номерах вспомогательной версии Apache только считают Альфой/Бетой, кажется, что мы должны будем ожидать httpd 2.6, который будет выпущен. Я не мог найти информацию об этом, поэтому на данный момент я не задержу дыхание.

Альтернативные способы, которыми я занимался расследованиями для использования Apache с PKCS#11:

  • Использование mod_nss вместо mod_ssl
  • Имеет модуль PKCS#11, который может получить параметры от поддельного файла ключей (чтобы иметь Apache 2.4 для чтения ssl конфигурации без проблем)
0
ответ дан 23 November 2019 в 04:07

Теги

Похожие вопросы