通过 engine_pkcs11 和 OpenSSL 将 Apache 与 PKCS#11 设备集成

通过 engine_pkcs11 和 OpenSSL 将 Apache 与 PKCS#11 设备集成

我在 mod_ssl 中遇到了 SSLCryptoDevice 指令问题。当我运行命令“openssl engine”时,会返回所有可用引擎,包括 pkcs11 (libengine-pkcs11-openssl),但是当我在 mod_ssl 配置中设置 SSLCryptoDevice pkcs11 并尝试启动 Apache 时,会返回错误“SSLCryptoDevice:无效参数;必须是以下之一:”,但现在引擎 pkcs11 未列出。在 openssl 中运行良好。

一些系统信息:Debian 8 x64、OpenSSL 1.0.1k、Apache 2.4.10

Apache启动错误:http://pastebin.com/b4GLaSHL

OpenSSL 引擎:http://pastebin.com/kXNYG2Yw

答案1

PKCS#11不支持mod_ssl。请参阅:

https://bz.apache.org/bugzilla/show_bug.cgi?id=42687

https://bz.apache.org/bugzilla/show_bug.cgi?id=42688

https://bz.apache.org/bugzilla/show_bug.cgi?id=52473

您可以尝试应用此补丁,但这些是不是适合生产使用。

另一种选择是使用mod_nss.
mod_nss使用 NSS 作为加密库而不是 OpenSSL 并支持 PKCS#11

答案2

mod_ssl 从 v2.4.42 开始支持 PKCS11。

作为将证书和私钥存储在文件中的替代方法,可以使用证书标识符来标识存储在令牌中的证书。目前,只有 PKCS#11 URI 被识别为证书标识符,并且可以与 OpenSSL pkcs11 引擎结合使用。如果省略 SSLCertificateKeyFile,则可以通过 SSLCertificateFile 指定的单个标识符加载证书和私钥。

一个例子http://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile

# Example use of a certificate and private key from a PKCS#11 token:
SSLCertificateFile "pkcs11:token=My%20Token%20Name;id=45"

相关内容