首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache2 SSL证书/密钥不匹配

Apache2 SSL证书/密钥不匹配
EN

Stack Overflow用户
提问于 2013-08-01 17:44:34
回答 3查看 42.9K关注 0票数 6

我正在尝试将Apache设置为使用私钥和证书来使用SSL。问题是Apache不知何故认为密钥和crt文件不匹配:

代码语言:javascript
复制
[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

在这个错误之后,我使用以下命令检查密钥和证书是否匹配:

代码语言:javascript
复制
$ openssl x509 -noout -modulus -in server.crt | openssl md5
$ openssl rsa -noout -modulus -in server.key | openssl md5

而且结果都是一样的,所以看起来密钥和证书是匹配的!?我的站点配置包含以下SSL设置:

代码语言:javascript
复制
    SSLCertificateFile    /etc/ssl/certs/server.crt
    SSLCertificateKeyFile /etc/ssl/private/server.key

证书由我为我的客户使用的自创建的CA签名。目前,我正在通过Java (和Chrome/Firefox/IE/Safari/... )托管HTTPS站点所有人都接受证书和密钥),但是性能并不像我希望的那样,因此我愿意切换到Apache。然而,我不明白为什么Apache说证书和密钥不匹配?我在谷歌上搜索了很多这个错误,发现了很多结果,但是没有一个代表我的情况,也没有一个有效的解决方案来解决我的问题。我使用自己的CA的原因是,我有几百个(还在不断增加)的证书用于基于信任的网络。

编辑:这个问题似乎与openssl有关,我测试了以下内容,但最终出现了相同的错误:

代码语言:javascript
复制
..............:~$ 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:

谁能为我指出正确的方向,指出我做错了什么?

我将key服务器直接使用的JKS重新编码为PEM证书和私钥(所有浏览器都接受),但仍然从openssl获得相同的错误:

代码语言:javascript
复制
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/cert组合,而openssl拒绝同时使用它们呢?

EN

回答 3

Stack Overflow用户

发布于 2013-12-02 17:39:05

代码语言:javascript
复制
$ 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可能会被加密。您可能需要在不使用密码短语的情况下重新保存密钥。

票数 4
EN

Stack Overflow用户

发布于 2014-01-16 08:25:57

你的虚拟主机文件是什么样子的?如果不看这个文件,就很难知道为什么会收到警告。但是,该警告很可能来自您的虚拟主机文件,该文件具有不同的服务器名称,而不是为其设置SSL证书。

检查您的虚拟主机文件并更改

代码语言:javascript
复制
<VirtualHost _default_:443>

代码语言:javascript
复制
<VirtualHost *:443>

甚至是

代码语言:javascript
复制
<VirtualHost yoursevername:443>
票数 4
EN

Stack Overflow用户

发布于 2014-03-11 11:19:08

无论您的<VirtualHost ...:443>行中包含什么内容,我认为问题都是由错误日志中的行指示的:

代码语言:javascript
复制
[warn] RSA server certificate wildcard CommonName (CN) `*.-----.nl' does NOT match server name!?

VirtualHost中的主题是什么?它是否与证书的CN匹配,即openssl x509 -noout -text -in <certfile>输出的“ServerName:”行中的最后一项

还有,你有没有试过noloader的建议?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17990537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档