我正在尝试将 Apache 设置为使用私钥和证书来使用 SSL。问题是 Apache 以某种方式认为密钥和 crt 文件不匹配:
[Thu Aug 01 11:35:18 2013] [warn] RSA server certificate wildcard CommonName (CN) `*.-----.nl' does NOT match server name!?
[Thu Aug 01 11:35:18 2013] [debug] ssl_engine_init.c(846): Configuring RSA server private key
[Thu Aug 01 11:35:18 2013] [error] Unable to configure RSA server private key
[Thu Aug 01 11:35:18 2013] [error] SSL Library Error: 185073780 error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch
在此错误之后,我使用以下命令检查了密钥和证书是否匹配:
$ openssl x509 -noout -modulus -in server.crt | openssl md5
$ openssl rsa -noout -modulus -in server.key | openssl md5
结果都是一样的,所以看起来密钥和证书确实匹配!?我的站点配置包含以下 SSL 设置:
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
该证书由我为我的客户使用的自行创建的 CA 签名。目前我正在通过 Java(和 Chrome/Firefox/IE/Safari/... 都接受证书和密钥)托管 HTTPS 站点,但是性能并不如我所愿,因此我m 愿意切换到 Apache。但是我不明白为什么 Apache 说证书和密钥不匹配?我为这个错误搜索了很多,发现了很多结果,但是没有一个代表我的情况,也没有为我的问题提供有效的解决方案。我使用自己的 CA 的原因是我有数百个(并且还在增加)证书用于基于信任的网络。
编辑:这个问题似乎与openssl有关,我用相同的最终错误测试了以下内容:
..............:~$ openssl s_server -cert server.crt -key server.key
140518544565920:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1319:
140518544565920:error:0D06C03A:asn1 encoding routines:ASN1_D2I_EX_PRIMITIVE:nested asn1 error:tasn_dec.c:831:
140518544565920:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:751:Field=n, Type=RSA
140518544565920:error:04093004:rsa routines:OLD_RSA_PRIV_DECODE:RSA lib:rsa_ameth.c:115:
Using default temp DH parameters
Using default temp ECDH parameters
error setting private key
140518544565920:error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch:x509_cmp.c:331:
任何人都可以为我做错的事情指出正确的方向吗?
我将网络服务器(所有浏览器都接受)直接使用的 JKS 重新转码为 PEM 证书和私钥,但是当我从 openssl 收到相同的错误时:
openssl s_server -debug -cert server.crt -key server.key
Using default temp DH parameters
Using default temp ECDH parameters
error setting private key
140157841004192:error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch:x509_cmp.c:331:
怎么可能所有浏览器都接受密钥/证书组合而 openssl 拒绝一起使用它们?