无法使用自签名 SSL 证书启动 httpd 2.4.9

无法使用自签名 SSL 证书启动 httpd 2.4.9

我无法在 CentOS 6.5 上使用最简单的 SSL 配置启动 httpd 2.4.9(也尝试过 2.4.x)。机器上安装的 openssl 版本是OpenSSL 1.0.1e-fips 11 Feb 2013(我也使用“yum update”将其升级到最新的修补版本)

我已经使用以下命令编译并安装了 httpd 2.4.9:

./configure --enable-ssl --with-ssl=/usr/local/ssl/ --enable-proxy=shared --enable-proxy_wstunnel=shared --with-apr=apr-1.5.1/ --with-apr-util=apr-util-1.5.3/
make
make install

现在我正在生成默认的自签名证书,如 CentOS HowTo 中所述:

openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
cp server.crt /usr/local/apache2/conf
cp server.key /usr/local/apache2/conf
cp server.csr /usr/local/apache2/conf

这是我的 httpd-ssl.conf 文件:

Listen 443
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLPassPhraseDialog  builtin
SSLSessionCache        "shmcb:/usr/local/apache2/logs/ssl_scache(512000)"
SSLSessionCacheTimeout  300
<VirtualHost *:443>
    DocumentRoot "/usr/local/apache2/htdocs"
    ServerName 192.168.9.128
    ServerAdmin [email protected]
    ErrorLog "/usr/local/apache2/logs/error_log"
    TransferLog "/usr/local/apache2/logs/access_log"
    SSLEngine on
    SSLCertificateFile "/usr/local/apache2/conf/server.crt"
    SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"
    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory "/usr/local/apache2/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
CustomLog "/usr/local/apache2/logs/ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

当我使用启动httpd时bin/apachectl -k start出现以下错误error_log

Wed Jun 04 00:29:27.995654 2014] [ssl:info] [pid 24021:tid 139640404293376] AH01887: Init: Initializing (virtual) servers for SSL
[Wed Jun 04 00:29:27.995726 2014] [ssl:info] [pid 24021:tid 139640404293376] AH01914: Configuring server 192.168.9.128:443 for SSL protocol
[Wed Jun 04 00:29:27.995863 2014] [ssl:debug] [pid 24021:tid 139640404293376] ssl_engine_init.c(312): AH01893: Configuring TLS extension handling
[Wed Jun 04 00:29:27.996111 2014] [ssl:debug] [pid 24021:tid 139640404293376] ssl_util_ssl.c(343): AH02412: [192.168.9.128:443] Cert matches for name '192.168.9.128' [subject: CN=192.168.9.128,OU=XXX,O=XXXX,L=XXXX,ST=NRW,C=DE / issuer: CN=192.168.9.128,OU=XXX,O=XXXX,L=XXXX,ST=NRW,C=DE / serial: AF04AF31799B7695 / notbefore: Jun  3 22:26:45 2014 GMT / notafter: Jun  3 22:26:45 2015 GMT]
[Wed Jun 04 00:29:27.996122 2014] [ssl:info] [pid 24021:tid 139640404293376] AH02568: Certificate and private key 192.168.9.128:443:0 configured from /usr/local/apache2/conf/server.crt and /usr/local/apache2/conf/server.key
[Wed Jun 04 00:29:27.996209 2014] [ssl:info] [pid 24021:tid 139640404293376] AH01914: Configuring server 192.168.9.128:443 for SSL protocol
[Wed Jun 04 00:29:27.996280 2014] [ssl:debug] [pid 24021:tid 139640404293376] ssl_engine_init.c(312): AH01893: Configuring TLS extension handling
[Wed Jun 04 00:29:27.996295 2014] [ssl:emerg] [pid 24021:tid 139640404293376] AH02572: Failed to configure at least one certificate and key for 192.168.9.128:443
[Wed Jun 04 00:29:27.996303 2014] [ssl:emerg] [pid 24021:tid 139640404293376] 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?
[Wed Jun 04 00:29:27.996308 2014] [ssl:emerg] [pid 24021:tid 139640404293376] 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?
[Wed Jun 04 00:29:27.996318 2014] [ssl:emerg] [pid 24021:tid 139640404293376] SSL Library Error: error:140A80B1:SSL routines:SSL_CTX_check_private_key:no certificate assigned
[Wed Jun 04 00:29:27.996321 2014] [ssl:emerg] [pid 24021:tid 139640404293376] AH02312: Fatal error initialising mod_ssl, exiting.
AH00016: Configuration Failed

然后我尝试生成缺失的 DH 参数和 EC 参数:

openssl dhparam -outform PEM -out dhparam.pem 2048
openssl ecparam -out ec_param.pem -name prime256v1
cat dhparam.pem ec_param.pem >> /usr/local/apache2/conf/server.crt

它可以减轻错误,但会出现以下情况:

[Wed Jun 04 00:34:05.021438 2014] [ssl:info] [pid 24089:tid 140719371077376] AH01887: Init: Initializing (virtual) servers for SSL
[Wed Jun 04 00:34:05.021487 2014] [ssl:info] [pid 24089:tid 140719371077376] AH01914: Configuring server 192.168.9.128:443 for SSL protocol
[Wed Jun 04 00:34:05.021874 2014] [ssl:debug] [pid 24089:tid 140719371077376] ssl_engine_init.c(312): AH01893: Configuring TLS extension handling
[Wed Jun 04 00:34:05.022050 2014] [ssl:debug] [pid 24089:tid 140719371077376] ssl_util_ssl.c(343): AH02412: [192.168.9.128:443] Cert matches for name '192.168.9.128' [subject: CN=192.168.9.128,OU=XXX,O=XXXX,L=XXXX,ST=NRW,C=DE / issuer: CN=192.168.9.128,OU=XXX,O=XXXX,L=XXXX,ST=NRW,C=DE / serial: AF04AF31799B7695 / notbefore: Jun  3 22:26:45 2014 GMT / notafter: Jun  3 22:26:45 2015 GMT]
[Wed Jun 04 00:34:05.022066 2014] [ssl:info] [pid 24089:tid 140719371077376] AH02568: Certificate and private key 192.168.9.128:443:0 configured from /usr/local/apache2/conf/server.crt and /usr/local/apache2/conf/server.key
[Wed Jun 04 00:34:05.022285 2014] [ssl:debug] [pid 24089:tid 140719371077376] ssl_engine_init.c(1016): AH02540: Custom DH parameters (2048 bits) for 192.168.9.128:443 loaded from /usr/local/apache2/conf/server.crt
[Wed Jun 04 00:34:05.022389 2014] [ssl:debug] [pid 24089:tid 140719371077376] ssl_engine_init.c(1030): AH02541: ECDH curve prime256v1 for 192.168.9.128:443 specified in /usr/local/apache2/conf/server.crt
[Wed Jun 04 00:34:05.022397 2014] [ssl:info] [pid 24089:tid 140719371077376] AH01914: Configuring server 192.168.9.128:443 for SSL protocol
[Wed Jun 04 00:34:05.022464 2014] [ssl:debug] [pid 24089:tid 140719371077376] ssl_engine_init.c(312): AH01893: Configuring TLS extension handling
[Wed Jun 04 00:34:05.022478 2014] [ssl:emerg] [pid 24089:tid 140719371077376] AH02572: Failed to configure at least one certificate and key for 192.168.9.128:443
[Wed Jun 04 00:34:05.022488 2014] [ssl:emerg] [pid 24089:tid 140719371077376] SSL Library Error: error:140A80B1:SSL routines:SSL_CTX_check_private_key:no certificate assigned
[Wed Jun 04 00:34:05.022491 2014] [ssl:emerg] [pid 24089:tid 140719371077376] AH02312: Fatal error initialising mod_ssl, exiting.

AH00016:配置失败

我尝试生成简单的证书/密钥对,正如httpd 文档不幸的是,我仍然遇到与上述完全相同的错误。

我看到了有类似问题的错误报告: https://issues.apache.org/bugzilla/show_bug.cgi?id=56410 但是我拥有的 openssl 版本报告说可以正常工作。我还尝试应用报告中的补丁并构建最新的 2.4.x 分支,但没有成功,我得到了与上述相同的错误。

我还尝试过创建一个短证书链并使用 SSLCertificateChainFile 指令设置根 CA 证书。但这也没有用,我得到了与上述完全相同的错误。

我对设置强化的安全性等不感兴趣。我唯一需要做的是使用最简单的 SSL 配置启动 httpd,以继续测试 mod_proxy_wstunnel 的代理配置

有人遇到过并解决过这个问题吗?

我创建自签名证书的顺序是否不正确?

我将非常感激任何帮助!

PS:更新了初始 http-ssl.conf 以反映我在测试时的正确状态。

答案1

问题似乎出在您生成的证书上。您似乎忘记/跳过了一些步骤。我认为您为证书指定了一些密码,但 apache 无法找到它。密码可以通过 SSLPassPhraseDialog 指定,但您的配置文件中缺少该密码。

或者,您可以通过在生成证书时从证书中删除该密码来避免使用该密码。我已按照以下步骤成功生成自签名证书http://www.akadia.com/services/ssh_test_certificate.html

我建议使用上面链接中提到的说明重新生成一个新证书并再次测试......

答案2

您创建证书颁发机构的初始命令可能不正确。我将尝试使用以下命令重建 CA,这些命令取自 Arch Linux Wiki:

# openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out server.key
# chmod 600 server.key
# openssl req -new -key server.key -out server.csr
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

让我们知道怎么回事!

答案3

顺便提一下,我注意到您使用的是易受攻击的 OpenSSL 版本 (1.0.1e-fips)。此版本受到著名的 heartbleed 漏洞的影响。请参阅http://en.wikipedia.org/wiki/Heartbleed更多细节。

您可以尝试将 OpenSSL 升级到解决此问题的适当最新版本。

答案4

在原始发帖人解决问题 4 年后,我偶然发现了这个页面,当时我遇到了类似的问题,并找到了解决方案。完全不同,但发布在这里是为了那些在研究类似错误消息后来这里的人。我的配置和你的很像,对 httpd-2.2 完全有效,但神秘的是,对 httpd-2.4 不起作用,只需要做一点不同的事情。经过一番努力,这个终于对我有用了。首先是线索:你不能再只依赖你的 VirtualHost 定义。你必须像这样从 conf.d/ssl.conf 引用有效的证书/密钥对(位置适用于我的 Fedora 系统):

SSL证书文件 /etc/pki/tls/certs/localhost.crt

SSLCertificateKey文件 /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 中已经可以正常工作,那么您已经加载了。

相关内容