Apache2 SSL证书/密钥不匹配



我正在尝试设置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> 输出的"主题:"行中的最后一个条目

另外,你有没有试过诺拉德的建议?

最新更新