【问题标题】:Apache2 SSL Certificate/Key mismatchApache2 SSL 证书/密钥不匹配
【发布时间】:2013-08-02 04:02:27
【问题描述】:

我正在尝试将 Apache 设置为使用私钥和证书来使用 SSL。问题是 Apache 不知何故认为 key 和 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拒绝一起使用它们?

【问题讨论】:

  • 你发现了吗?
  • @尼克?请解释您的评论。
  • @kenorb 我知道密钥和证书匹配,并且已经尝试将它们按指定顺序放入一个文件中。然而,这似乎没有帮助。

标签: ssl apache2 openssl certificate


【解决方案1】:
$ 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 可能会被加密。您可能必须在没有密码的情况下重新保存密钥。

【讨论】:

    【解决方案2】:

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

    <VirtualHost _default_:443>
    

    <VirtualHost *:443>
    

    甚至

    <VirtualHost yoursevername:443>
    

    【讨论】:

    • 该问题与 open_ssh 有关,因为它也发生在没有 apache 的 ope_ssl 中。因此主机名是不相关的。虚拟主机文件设置为
    【解决方案3】:

    无论您的&lt;VirtualHost ...:443&gt; 行中有什么内容,我认为问题都由错误日志中的行指示:

    [warn] RSA server certificate wildcard CommonName (CN) `*.-----.nl' does NOT match server name!?
    

    您的 VirtualHost 中的 ServerName 是什么,它是否与您的证书的 CN 匹配,即 openssl x509 -noout -text -in &lt;certfile&gt; 输出的“主题:”行中的最后一个条目

    另外,你有没有尝试过 noloader 的建议?

    【讨论】:

      猜你喜欢
      • 2011-10-19
      • 1970-01-01
      • 2020-07-13
      • 2011-08-17
      • 2012-08-16
      • 2015-11-24
      • 1970-01-01
      • 2022-07-26
      • 2012-04-11
      相关资源
      最近更新 更多