我在 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"