ssl - Apache2 SSL 证书/ key 不匹配

标签 ssl apache2 openssl certificate

我正在尝试将 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

出现此错误后,我使用以下方法检查了 key 和证书是否匹配:

$ openssl x509 -noout -modulus -in server.crt | openssl md5
$ openssl rsa -noout -modulus -in server.key | openssl md5

而且结果都一样,看来 key 和证书确实匹配!?我的站点配置包含以下 SSL 设置:

    SSLCertificateFile    /etc/ssl/certs/server.crt
    SSLCertificateKeyFile /etc/ssl/private/server.key

该证书由我为我的客户使用的自行创建的 CA 签名。目前我正在通过 Java 托管 HTTPS 站点(和 Chrome/Firefox/IE/Safari/... 都接受证书和 key ),但是性能并不像我希望的那样,因此我'我愿意切换到 Apache。但是我不明白为什么 Apache 说证书和 key 不匹配?我在谷歌上搜索了很多这个错误并找到了很多结果但是没有一个代表我的情况也没有为我的问题提供有效的解决方案。我使用自己的 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:

怎么可能所有浏览器都接受 key /证书组合,而 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 可能已加密。您可能需要在没有密码的情况下重新保存 key 。

关于ssl - Apache2 SSL 证书/ key 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17990537/

相关文章:

regex - 如何在 Apache RewriteRule 中向正则表达式添加 +(加号)?

wordpress - nginx 反向代理到 apache-wordpress 可以工作,但到外部 url 的 proxy_pass 失败

c++ - Openssl需要使用CA捆绑文件(中级证书)

iis - 如何仅从特定 CA 请求客户端证书

c++ - Boost asio ssl:如果私钥通过 context::use_private_key 传递,则不调用密码回调

sslstrip 并不总是有效 - 仅在成功登录之前

linux - 禁用 SSL 2.0 但不更新 SSL 2.0+? Apache 2.x

android - 由于 OpenSSL 项目中缺少 header 而导致编译错误

openssl - BIO中的B代表什么?

php - 我可以使用不是磁盘上文件的证书来使用 SSL 套接字吗? (即在数据库中)