6

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

4

3 回答 3

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可能已加密。您可能必须在没有密码的情况下重新保存密钥。

于 2013-12-02T09:39:04.883 回答
4

您的虚拟主机文件是什么样的?如果没有看到该文件,很难说出您收到警告的原因。但是,警告很可能来自您的虚拟主机文件,该文件的服务器名称与设置 SSL 证书的服务器名称不同。
检查您的虚拟主机文件并更改

<VirtualHost _default_:443>

<VirtualHost *:443>

甚至

<VirtualHost yoursevername:443>
于 2014-01-16T00:25:57.297 回答
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 的建议?

于 2014-03-11T03:19:07.820 回答