【发布时间】:2023-03-04 04:28:01
【问题描述】:
Apache 在尝试设置 ssl 证书后抛出以下错误:
[ssl:emerg] [pid 30907] AH02572: Failed to configure at least one certificate and key for localhost:443
[ssl:emerg] [pid 30907] SSL Library Error: error:140A80B1:SSL routines:SSL_CTX_check_private_key:no certificate assigned
[ssl:emerg] [pid 30907] AH02312: Fatal error initialising mod_ssl, exiting.
我使用 MAC OS:Yosemite、PHP 5.5.20、Apache 2.4.9
并已按照以下步骤生成我的 ssl 证书 (http://www.akadia.com/services/ssh_test_certificate.html)
cd /etc/apache2/
sudo mkdir certs
cd certs
sudo openssl genrsa -des3 -out server.key 1024
sudo openssl req -new -key server.key -out server.csr
Country Name (2 letter code) [GB]:US
State or Province Name (full name) [Berkshire]:California
Locality Name (eg, city) [Newbury]:LA
Organization Name (eg, company) [My Company Ltd]:Company
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:dev.test.local
Email Address []:username@gmail.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
sudo cp server.key server.key.org
sudo openssl rsa -in server.key.org -out server.key
sudo openssl x509 -req -days 730 -in server.csr -signkey server.key -out server.crt
接下来我为我的 apache 配置文件设置了以下内容:
etc/apache2/httpd.conf:
LoadModule ssl_module libexec/apache2/mod_ssl.so
LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
Include /private/etc/apache2/extra/httpd-ssl.conf
etc/apache2/extra/httpd-ssl.conf:
Listen 443
SSLPassPhraseDialog builtin
<VirtualHost _default_:443>
SSLEngine on
Mutex sysvsem default # Added after seeing mutex issues for apache 2.4, http://stackoverflow.com/questions/13969272/apache-sslmutex-issue
etc/apache2/extra/httpd-vhosts.conf:
<VirtualHost *:443>
ServerName dev.test.local
DocumentRoot "/Users/username/Sites/test/public"
<Directory "/Users/username/Sites/test/public">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
SSLEngine on
SSLCertificateFile /etc/apache2/certs/server.crt
SSLCertificateKeyFile /etc/apache2/certs/server.key
</VirtualHost>
重新启动并运行 apache config test 后,看起来好像没有问题:
sudo apachectl restart
sudo apachectl configtest
[Tue Jan 06 13:56:01.480270 2015] [so:warn] [pid 31636] AH01574: module php5_module is already loaded, skipping
Syntax OK
非常感谢您的帮助,如果需要,我很乐意提供更多信息。
【问题讨论】:
-
由于您验证了密钥和证书匹配,因此失败的主要原因在于对包含它们的文件的访问。例如,当您创建 certs 子目录时,读取该子目录的权限是什么?
-
另外,您是否给您的密钥设置了密码? apache 也需要找到它。
-
啊,好吧,所以我认为这可能是文件权限的问题,我给了文件完全权限,但没有运气。 drwxrwxrwx 6 根轮 204 证书
-
是的,我确实添加了密码,我是否错过了其他一些密码设置?或者这是否涵盖了这一点? cp server.key server.key.org openssl rsa -in server.key.org -out server.key
-
出于测试目的,请生成不带短语的新证书+密钥并尝试。如果它有效,那么我希望某个好心人会为您指出正确的 apache 配置文件设置,以便在您的证书+密钥对中使用密码。
标签: php ssl ssl-certificate osx-yosemite apache2.4