将 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 2、SSL 和客户端证书

CentOS下给apache服务添加SSL证书

如何保障服务器数据安全,教你将SSL证书安装到Apache Web服务器

如何将 SSL 从 Tomcat 迁移到 Apache HTTPD?

网站⭐Windows下,将xampp升级为https