![Apache SSL 错误:未找到私钥](https://linux22.com/image/651035/Apache%20SSL%20%E9%94%99%E8%AF%AF%EF%BC%9A%E6%9C%AA%E6%89%BE%E5%88%B0%E7%A7%81%E9%92%A5.png)
我在 Ubuntu 14.04 上运行 apache 并尝试实现 SSL。如能得到任何帮助我将不胜感激。
default-ssl.conf 具有:
SSLCertificateFile /etc/apache2/ssl/domain.crt
SSLCertificateKeyFile /etc/apache2/ssl/domain.csr
当我重新启动 apache 时,/var/log/apache2/error.log 中的错误消息是:
[Sun Feb 01 19:31:06.443226 2015] [ssl:error] [pid 30927] AH02203: Init: Private key not found
[Sun Feb 01 19:31:06.443408 2015] [ssl:error] [pid 30927] SSL Library Error: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Sun Feb 01 19:31:06.443424 2015] [ssl:error] [pid 30927] SSL Library Error: error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 er$
[Sun Feb 01 19:31:06.443435 2015] [ssl:error] [pid 30927] SSL Library Error: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Sun Feb 01 19:31:06.443447 2015] [ssl:error] [pid 30927] SSL Library Error: error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error (Ty$
[Sun Feb 01 19:31:06.443458 2015] [ssl:error] [pid 30927] SSL Library Error: error:04093004:rsa routines:OLD_RSA_PRIV_DECODE:RSA lib
[Sun Feb 01 19:31:06.443468 2015] [ssl:error] [pid 30927] SSL Library Error: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Sun Feb 01 19:31:06.443479 2015] [ssl:error] [pid 30927] SSL Library Error: error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error (Ty$
[Sun Feb 01 19:31:06.443487 2015] [ssl:emerg] [pid 30927] AH02311: Fatal error initialising mod_ssl, exiting. See /var/log/apache2/error.log for more inf$
答案1
警告: 永远不要在互联网上发布您的私钥。甚至不要将其复制到另一台计算机、工作站等。必须尽可能保持私密。
SSLCertificateKeyFile 需要私钥。此密钥通常在 CSR 之前或同时生成。搜索以包含以下内容的行开头的文件:BEGIN PRIVATE KEY
仅当您要求签署证书时才需要 CSR(证书签名请求)。之后您可以将其丢弃。
如果您丢失了私钥,您将需要生成一个新的私钥,然后生成新的 CSR 并要求 CA(证书颁发机构)再次签署 CSR。
答案2
我知道有人已经回答了这个问题,但我想让其他人知道当我遇到这个错误时发生了什么。
在我的问题中,我错误地将 SSLCertificateFile 而不是 SSLCertificateChainFile 用于我的证书包。这个错误一直出现,让我很困惑。我一直以为我的私钥错了。
答案3
问题如下:
SSLCertificateKeyFile /etc/apache2/ssl/domain.csr
您错误地将证书签名请求 (CSR) 文件放在此处。您应该将用于生成 CSR 的私钥文件放在此处。该私钥文件不应受密码保护,否则每次(重新)启动 Apache 时您都需要输入密码。
为了造福子孙后代,这里简要介绍如何使用 OpenSSL 生成 CSR(可从Ubuntu 文档):
1)生成服务器密钥:
openssl genrsa -des3 -out server.key 2048
这要求您指定一个密码。
2)制作无密码私钥,在提示时输入您上面使用的密码:
openssl rsa -in server.key -out server.key.insecure
mv server.key server.key.SECURE
mv server.key.insecure server.key
3)使用无密码私钥生成 CSR:
openssl req -new -key server.key -out mydomain.org.csr
其中“mydomain.org”可能是您的域名。您必须以交互方式回答几个问题。完成后,将文件发送mydomain.org.csr
到您的证书颁发机构。您将得到一个*.crt
文件或一个*.pem
文件。假设他们给了您mydomain.org.crt
。将其安装为您的证书,并将无密码密钥文件安装为您的密钥(这些位置对 Ubuntu 14.04 有效,它们可能在其他系统上的其他地方,请查看 Apache2 文档):
sudo cp mydomain.org.crt /etc/ssl/certs
sudo cp server.key /etc/ssl/private/mydomain.org.key
最后编辑 Apache2 配置(可以是default-ssl.conf
):
SSLEngine on
SSLCertificateFile /etc/ssl/certs/mydomain.org.crt
SSLCertificateKeyFile /etc/ssl/private/mydomain.org.key
希望这可以帮助。
答案4
我花了点时间研究这个问题,但一定要确保你有一个完整的私钥文件。结果发现我的私钥文件少了几行。
检查私钥的命令是:
openssl rsa -in /etc/httpd/certs/server.key -check
将 /etc/httpd/certs/server.key 替换为您服务器的私钥的完整路径,如果一切顺利,您将看到:
RSA key ok
希望它能对某些人有所帮助,顺便说一下,我的服务器是 CentOS 7.6 和 Apache/2.4.6