我尝试设置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:
任何人都可以指出我正确的方向,我做错了吗?
我将网络服务器直接使用的已使用的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拒绝一起使用它们?
答案 0 :(得分:4)
$ 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
可能已加密。您可能必须在没有密码短语的情况下重新保存密钥。
答案 1 :(得分:4)
您的虚拟主机文件是什么样的?
如果没有看到该文件,很难说出为什么会收到警告。但是,警告很可能来自您的虚拟主机文件,其服务器名称与SSL证书的设置名称不同。
检查虚拟主机文件并更改
<VirtualHost _default_:443>
到
<VirtualHost *:443>
甚至
<VirtualHost yoursevername:443>
答案 2 :(得分:0)
无论您的<VirtualHost ...:443>
行中有什么内容,我认为错误日志中的行标明了问题:
[warn] RSA server certificate wildcard CommonName (CN) `*.-----.nl' does NOT match server name!?
您的VirtualHost中的ServerName
是什么,它与证书的CN相匹配,即openssl x509 -noout -text -in <certfile>
另外,你是否尝试过noloader的建议?