从 LetsEncrypt 获得新的 SSL 证书后,我尝试了 7 个小时来启动我的 Apache Web 服务器。我已经获得了 ECDSA 证书,但服务器仍然无法启动,日志如下:
[Thu Mar 29 19:23:43.839012 2018] [ssl:emerg] [pid 19908:tid 140570990629824] SSL Library Error: error:0906D06C:PEM routines:PEM_read_bio:no start line (Expecting: DH PARAMETERS) -- Bad file contents or format - or even just a forgotten SSLCertificateKeyFile?
[Thu Mar 29 19:23:43.839038 2018] [ssl:emerg] [pid 19908:tid 140570990629824] SSL Library Error: error:0906D06C:PEM routines:PEM_read_bio:no start line (Expecting: EC PARAMETERS) -- Bad file contents or format - or even just a forgotten SSLCertificateKeyFile?
[Thu Mar 29 19:23:43.839069 2018] [ssl:emerg] [pid 19908:tid 140570990629824] SSL Library Error: error:140A80B1:SSL routines:SSL_CTX_check_private_key:no certificate assigned
[Thu Mar 29 19:23:43.839086 2018] [ssl:emerg] [pid 19908:tid 140570990629824] AH02311: Fatal error initialising mod_ssl, exiting. See /var/log/apache2/error.log for more information
AH00016: Configuration Failed
VirtualHosts中SSL的配置为:
ServerName site.example.com
SSLCipherSuite HIGH:!MD5:!aNULL
SSLHonorCipherOrder on
SSLCompression off
SSLProtocol all -SSLv2 -SSLv3
Header add Strict-Transport-Security "max-age=15768000"
SSLCertificateFile /etc/letsencrypt/ecdsa/site.example.com/0001_chain.pem
SSLCertificateKeyFile /etc/letsencrypt/ecdsa/site.example.com/privkey.pem
答案1
也许有点晚了,但我在寻找相同错误消息的答案和找到解决方案之间走过了这个页面。如果您像我一样从 httpd-2.2 继承了 VirtualHost 配置,我确信它没有任何问题。你的 openssl 也不可能有问题。郑重声明:我的系统上没有 dhparams.pem 文件。这对于 httpd-2.4 来说似乎有点不同。首先是线索:您不能再仅仅依赖 VirtualHost 定义。你必须像这样引用conf.d/ssl.conf中的有效证书/密钥对(位置适用于我的Fedora系统):
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.pem
我的是一个自签名证书,是从 httpd-2.2/openssl-1.0.2h 继承的。该证书采用 ascii PEM 格式。密钥已转换为 RSA 清晰副本,因此 httpd 启动时不需要密码。 (在这样做之前仔细评估您的环境)。证书的制作内容似乎并不重要,因为它仍然是在 VirtualHost 部分中定义的将呈现给客户端的证书。对我来说,这些证书(从 httpd-2.2 继承)采用 PEM 简短形式,而相应的密钥同样采用 RSA 清晰副本形式。当然,你必须加载 mod_ssl.so,但如果你的东西在 httpd-2.2 中工作,那么你已经这样做了。
答案2
[Thu Mar 29 19:23:43.839012 2018] [ssl:emerg] [pid 19908:tid 140570990629824] SSL Library Error: error:0906D06C:PEM routines:PEM_read_bio:no start line (Expecting: DH PARAMETERS) -- Bad file contents or format - or even just a forgotten SSLCertificateKeyFile?
这一行告诉您,您可能已经使用过 DH 参数,例如位于此处:
/etc/ssl/dhparams.pem
问题是,如果您想提高 DH 安全性并使用此文件,如下所示:
sudo openssl dhparam -out /etc/ssl/dhparams.pem.new 4096
sudo service apache2 stop
sudo mv /etc/ssl/dhparams.pem.new /etc/ssl/dhparams.pem
sudo service apache2 start
请注意,如果您将文件存储dhparams.pem
在非标准位置,则必须在 Apache 配置中提供该文件的路径,例如:
/etc/apache2/mods-enabled/ssl.conf
如下:
# Use my own generated DH Parameters file 4096 bits long
SSLOpenSSLConfCmd DHParameters "/etc/ssl/dhparams.pem"
[Thu Mar 29 19:23:43.839038 2018] [ssl:emerg] [pid 19908:tid 140570990629824] SSL Library Error: error:0906D06C:PEM routines:PEM_read_bio:no start line (Expecting: EC PARAMETERS) -- Bad file contents or format - or even just a forgotten SSLCertificateKeyFile?
这一行告诉我们,您可能已经使用过 ECDHParameters。
恕我直言,最好坚持自动设置:
SSLOpenSSLConfCmd ECDHParameters Automatic
请参阅man ecparam
获取更多信息。我个人并没有令人信服的理由来玩这个。
[Thu Mar 29 19:23:43.839069 2018] [ssl:emerg] [pid 19908:tid 140570990629824] SSL Library Error: error:140A80B1:SSL routines:SSL_CTX_check_private_key:no certificate assigned
此行告诉您指定的私钥丢失或整个设置配置错误。