将 SSL 添加到 Apache 服务器
Posted
技术标签:
【中文标题】将 SSL 添加到 Apache 服务器【英文标题】:Adding SSL to Apache Server 【发布时间】:2017-11-10 12:29:31 【问题描述】:我们今天获得了 SSL 证书,我正在尝试将 SSL 证书添加到域中,以便我们可以通过 https 访问该网站,但是我遇到了问题。
我们有一个在 Windows 上运行的 apache 服务器。
该配置适用于端口 80,但是当我将端口 443 添加到配置中时,一切都停止工作了。
我在启动 apache 时遇到的错误是
The requested operation has failed.
我添加了以下行
Listen 443
线下:
Listen 80
我添加了以下 VirtualHost 配置
<VirtualHost _default_:443>
DocumentRoot "c:/path/to/website"
ServerName example.com
ServerAlias example.com www.example.com
SSLEngine on
SSLCertificateFile "c:/path/to/cert/cert.crt"
SSLCertificateKeyFile "c:/path/to/cert/key.key"
SSLCACertificateFile "c:/path/to/cert/bundle.ca-bundle"
</VirtualHost>
但是,每当我在添加此内容后启动 apache 服务器时,它都不会启动并且出现错误。
我已经注释掉了一些代码,并将问题缩小到Listen 443
行。添加这个时有什么我没有考虑到的吗?
这些是 error.log 中的最后 3 行
[Thu Jun 08 18:15:31.909142 2017] [mpm_winnt:notice] [pid 66428:tid 712] AH00422: Parent: Received shutdown signal -- Shutting down the server.
[Thu Jun 08 18:15:47.209776 2017] [mpm_winnt:notice] [pid 67332:tid 620] AH00364: Child: All worker threads have exited.
[Thu Jun 08 18:15:48.067933 2017] [mpm_winnt:notice] [pid 66428:tid 712] AH00430: Parent: Child process exited successfully.
编辑
这是运行httpd.exe -e debug
的响应
(OS 10013)An attempt was made to access a socket in a way forbidden by its access permissions. : AH00072: make_sock: could not bind to address [::]:443
(OS 10013)An attempt was made to access a socket in a way forbidden by its access permissions. : AH00072: make_sock: could not bind to address 0.0.0.0:443
AH00451: no listening sockets available, shutting down
AH00015: Unable to open logs
【问题讨论】:
你在启动 apache 时遇到什么错误? 我相信是“操作无法完成”...我会检查一下我刚收拾东西回家所以会检查我什么时候回家(没想到会快回复!!) 没问题,请用错误信息更新问题 我刚刚更新了问题 你能检查一下apache错误日志吗? 【参考方案1】:我不知道你的 httpd.conf 文件长什么样,也许你不小心删除/更改了一些值。
您需要做的第一件事是恢复您的 httpd.conf 文件并在没有 SSL 配置的情况下启动服务。成功后,您可以继续执行以下步骤:
在一个新文件中分离所有 SSL 设置,也许一个名为 httpd-ssl.conf 的新文件是个好名字。
之后,在主 httpd.conf 的末尾添加以下行以包含新文件:
# Secure (SSL/TLS) connections
Include conf/httpd-ssl.conf
这是避免在主配置中意外更改/删除某些内容并限制可能错误来源的良好做法,您会知道任何错误都与包含的新文件有关。
您的新 conf/httpd-ssl.conf 应如下所示(标准设置):
# HTTPS port
Listen 443
<VirtualHost _default_:443>
# General setup for the virtual host
DocumentRoot "C:/your_httpd_path/htdocs"
ServerName www.example.com:443
ServerAdmin admin@example.com
ErrorLog "C:/your_httpd_path/logs/error.log"
TransferLog "C:/your_httpd_path/logs/access.log"
# SSL Engine Switch:
SSLEngine on
# Server Certificates:
SSLCertificateFile "c:/path/to/cert/cert.crt"
SSLCertificateKeyFile "c:/path/to/cert/key.key"
SSLCACertificateFile "c:/path/to/cert/bundle.ca-bundle"
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "C:/your_httpd_path/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
CustomLog "C:/your_httpd_path/logs/ssl_request.log" \
"%t %h %SSL_PROTOCOLx %SSL_CIPHERx \"%r\" %b"
</VirtualHost>
您是否尝试过使用 httpd.exe -e 调试?也许我们可以在这种模式下找到一些有用的东西。
更新:啊哈!你有一个错误!它可能是 443 某处的重复行。
你能在notepad++中检查你的文件并搜索所有匹配“443”的巧合吗?可能您已经配置了 443 并且您尝试再次添加它?你只需要一行:
Listen 443
或者可能已经在该端口中运行?检查:
netstat -na | findstr "443"
如果你有类似的东西:
TCP [::]:443 [::]:0 LISTENING
然后在您的 443 端口上运行其他东西。无论如何,您可以更改您的 httpd conf 并设置任何其他端口,例如 4443 即或终止现在占用 443 的进程。
【讨论】:
我就是这么做的。它已经在没有 ssl 的情况下工作......添加 Listen 443 行使其失败 试试我的建议,创建一个新文件并将其包含在主 httpd.conf 中,不要忘记更改 apache 安装、日志和证书的路径,然后重试。 提供的代码不起作用。如何使用 httpd.exe? Zach 你已经执行了 httpd.exe 并附加了输出。您是否按照我的说明测试了端口? 我现在已经解决了这个问题,我正在运行正在侦听端口 443 的 http 服务。以上是关于将 SSL 添加到 Apache 服务器的主要内容,如果未能解决你的问题,请参考以下文章
如何保障服务器数据安全,教你将SSL证书安装到Apache Web服务器