Apache SSL 错误:未找到私钥

Apache SSL 错误:未找到私钥

我在 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

相关内容