使用SSL配置Apache
以下说明假定您希望同时运行两个安全服务器(在端口上 443
)和常规服务器(在端口上 80
)。 首先,您需要配置服务器以侦听两个端口。 要么编辑 /etc/apache2/ports.conf
(在Debian中;这包含在 apache2.conf
)或编辑 /etc/apache2/apache2.conf
直接包含以下行:
听80听443
接下来,编辑 /etc/apache2/sites-enabled/yoursite
使用SSL设置。 就可维护性而言,使用VirtualHosts分离常规和安全服务器设置是最简单的选择。 VirtualHosts部分之外的任何配置(例如设置ServerAdmin)将同时应用于这两个(以及任何其他)VirtualHosts。
Apache 2.4.8及更高版本的版本期望您的服务器证书与任何中间证书并置在一个文件中。 要从SSL.com下载链接文件,请选择 Nginx
您的门户帐户中的下载链接:
另外,您可以使用以下命令将现有证书和中间文件连接起来:
$ cat /etc/ssl/private/ca-bundle-client.crt >> /etc/ssl/private/yourdomain.crt
将以下部分添加到您的配置文件中:
#================================================= #SSL /TLS 设置#================================================ = NameVirtualHost *:443 DocumentRoot“ / var / www / yoursite” SSLCertificateFile /etc/ssl/private/yourdomain.chained.crt上的SSLEngine SSLCertificateKeyFile /etc/ssl/private/myserver.key
关于此配置的一些注意事项:
SSLEngine
必须启用,以便服务器使用SSL。DocumentRoot
设置此虚拟主机的根目录。 这意味着您可以将安全内容与常规内容完全分开。SSLCertificateFile
应该设置为放置文件以及服务器证书和中间链的位置。SSLCertificateKeyFile
应该设置为放置私钥文件的位置。
将以下部分添加到您的配置文件中:
#================================================= #SSL /TLS 设置#================================================ = NameVirtualHost *:443 DocumentRoot“ / var / www / yoursite” SSLCertificateFile /etc/ssl/private/yourdomain.crt上的SSLEngine SSLCertificateKeyFile /etc/ssl/private/myserver.key SSLCertificateChainFile / etc / ssl / private / ca-bundle- client.crt
关于此配置的一些注意事项:
SSLEngine
必须启用,以便服务器使用SSL。DocumentRoot
设置此虚拟主机的根目录。 这意味着您可以将安全内容与常规内容完全分开。SSLCertificateFile, SSLCertificateChainFile,
和SSLCertificateKeyFile
应该分别设置为放置证书,中间文件和私钥文件的位置。
要在端口80上运行常规服务器,请将以下部分添加到配置文件中:
NameVirtualHost *:80 DocumentRoot“ / var / www / yoursite”#特定于主机的目录设置,选项等#这些选项中的大多数都可能在VirtualHosts部分之外设置。
保存编辑后的配置文件后,重新启动Web服务器。 如果您在生成证书时确实使用过密码,则在受到挑战时需要输入密码。
测试
如果您的网站上没有内容,请在Web服务器的根目录所在的位置创建一个基本的index.html页面。
然后将您的网络浏览器指向 https://www.yoursite.com
。 您应该看到SSL连接已打开,页面已交付。 如果您使用的是自签名证书,则浏览器将弹出警报,警告您无法验证服务器的身份。 您可以选择查看并接受证书。 如果使用外部证书,则所有这些都应在没有干预的情况下进行。
同时确保您无法使用http://访问受保护的内容。 如果尝试,则应收到错误消息。
故障排除
如果未按预期工作,请先使用以下命令检查服务器是否正在实际运行 ps -a | grep apache
。 如果仍然没有返回任何内容,请尝试重新启动它,然后在终端上检查错误消息。
还要检查对密钥和证书文件的权限是否设置正确(请参见上文),以及对测试HTML文件及其父目录的权限。
接下来,检查日志。 您应该检查主服务器日志以及在上面的配置文件中设置的SSL日志。 如果没有任何用处,请尝试将Apache2配置文件中的LogLevel值更改为“ debug”,重新启动Apache2,然后再次进行测试。 这应该提供更多的日志文件数据。
如果您也在端口80上运行常规Web服务器,请尝试通过http://而不是https://获取测试页,以帮助确定问题出在Web服务器还是SSL连接。 请注意,在上述设置中,Web服务器的根目录对于http://和https://是不同的,因此您将(或不应该!)访问相同的内容。 但是,如果http://根目录中的测试页工作正常,而https://根目录中的测试页却无法正常工作,则可以帮助您查明问题。
如果问题是SSL连接,则有用的工具是 s_client
,这是用于故障排除的诊断工具 TLS/ SSL连接。 基本用法是: /usr/bin/openssl s_client -connect localhost:443
。 还有许多其他选项,您可以检查其文档。 如果收到错误消息,这将有助于您查找问题。