我想在 Raspbian 上的 Apache 服务器上仅允许 https,但每次我尝试编辑 /ect/apache2/ 中的 ports.conf 以监听端口 443 并将 sites-available/000-default.conf 设置为:
<VirtualHost *:443>
服务器不再重新启动并且日志告诉我:
You configured HTTP(80) on the standard HTTPS(443) port!
我还缺少什么需要编辑吗?
答案1
错误消息非常直观:您仅配置了端口,而不是 TLS。您应该先阅读SSL/TLS 强加密:操作方法。
您的 SSL 配置至少需要包含以下指令。
LoadModule ssl_module modules/mod_ssl.so Listen 443 <VirtualHost *:443> ServerName www.example.com SSLEngine on SSLCertificateFile "/path/to/www.example.com.cert" SSLCertificateKeyFile "/path/to/www.example.com.key" </VirtualHost>
httpd.conf
您正在使用的发行版将配置拆分为不同文件夹中的不同文件,因此将所有这些文件添加到或中并不是明智之举apache2.conf
,而应该将其添加到包含它们的目的地中。
您正在修改默认非 SSL 站点来自sites-available/
,但它们实际上是从与sites-enabled/
进行符号链接的位置包含的a2ensite
(或ln -s
)。sites-available/default
与 链接到 一样sites-enabled/000-default
, 中的示例配置sites-available/default-ssl
应先修改,然后链接到sites-enabled/000-default-ssl
。类似地,在使用 命令创建到 的符号链接后LoadModule
来自。modules-enabled/
modules-available/
a2enmod ssl
但当然这还不是全部。TLS 还需要证书和密钥,它们不仅仅是配置文件中的几行,还需要创建和签名。所以是的,你错过了很多。
对于懒人来说,这里有各种各样的教程5 分钟内为 Apache 服务器启用 SSL。尽管是 2012-2014 年的,但看起来基本准确。您选择的发行版的手册可能也有自己的页面,这样会更准确。
答案2
仅运行端口 443 并不能实现 HTTPS;它只是告诉 Apache 监听该端口。您需要告诉它对该虚拟主机使用 SSL,并提供必要的 SSL 参数。
例如,对于名为“www.mysite.org”的网站,其网站根目录位于 /var/www/vhost/www.mysite.org/ 且证书密钥存储在“/etc/pki/tls/”下,您可以创建如下配置文件:
LoadModule ssl_module modules/mod_ssl.so
Listen 443
<VirtualHost *:443>
ServerName www.mysite.org
DocumentRoot /var/www/vhost/www.mysite.org/
SSLEngine on
SSLCertificateFile "/etc/pki/tls/certs/www.mysite.org.cert"
SSLCertificateKeyFile "/etc/pki/tls/private/www.mysite.org.key"
# This implements weaker encryption, use it if you have old web clients that can't handle modern strong encryption
#SSLProtocol all -SSLv3
#SSLCipherSuite HIGH:!aNULL:!MD5
# This implements strong encryption, disabling everything but TLSv1.2 (and 1.3 when that is implemented)
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
</VirtualHost>
如果您的 Apache 配置默认加载 ssl 模块(很可能如此),则可能不需要第一行。我还为您提供了两种加密强度选择,其中较弱的一组被注释掉。请根据需要进行调整。您还可以采取其他措施来增强安全性(例如使用 HSTS)并根据需要自定义网站,但您可以自行查找这些内容(如有必要)。
(如果您有兴趣,可以在此处找到有关 SSL 安全性的良好参考资料https://wiki.mozilla.org/Security/Server_Side_TLS。