我正在尝试设置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托管HTTPS网站(Chrome/Firefox/IE/Safari/…都接受证书和密钥),但性能并不像我希望的那样,因此我愿意改用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:
有人能为我的错误指明正确的方向吗?
我将Web服务器直接使用的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拒绝将它们一起使用?
$ 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:
添加-keyform
。它可以是DER或PEM。您必须查看server.key
才能确定表单。
如果server.key
具有--- BEGIN RSA PRIVATE KEY ---
(或类似的),则其PEM。如果它不是PEM编码的,那么尝试DER。
此外,server.key
可能被加密。您可能需要在没有密码短语的情况下重新保存密钥。
您的虚拟主机文件是什么样子的?如果没有看到该文件,很难判断您收到警告的原因。但是,警告很可能来自您的虚拟主机文件,该文件的服务器名称与SSL证书设置的服务器名称不同
检查虚拟主机文件并更改
<VirtualHost _default_:443>
至
<VirtualHost *:443>
甚至
<VirtualHost yoursevername:443>
无论您的<VirtualHost ...:443>
行中有什么,我认为错误日志中的行表明了问题:
[warn] RSA server certificate wildcard CommonName (CN) `*.-----.nl' does NOT match server name!?
来自VirtualHost的ServerName
是什么?它与证书的CN匹配吗?即openssl x509 -noout -text -in <certfile>
输出的"主题:"行中的最后一个条目
另外,你有没有试过诺拉德的建议?