Apache2 SSL证书/密钥不匹配

时间:2013-08-01 09:44:34

标签: ssl apache2 openssl certificate

我尝试设置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拒绝一起使用它们?

3 个答案:

答案 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的建议?