我有一个在 Raspberry Pi 上运行的 Web 服务器。我在端口 443 上运行 stunnel,因此我一直在努力将 Web 服务器移至端口 8443。我使用 Let's Encrypt (Certbot) 作为 SSL 证书,之前它们一直运行良好。
我已经学会了如何使用 DNS 质询获取证书,因此不再需要使用端口 443 进行身份验证。我相信我已经正确设置了所有配置文件,但我将在下面插入它们。
Apache 正在运行,并且没有任何事物与它冲突,但是每当我尝试通过 HTTPS 访问我的网站时,Chrome 都会说该网站意外关闭了连接,而 Edge 则说它使用了过时或不安全的 TLS 设置。
我一直在尝试自己解决这个问题,但目前我还不知道该怎么做。
端口配置文件
# If you just change the port or add more ports here, you will likely also'
# have to change the VirtualHost statement in'
# /etc/apache2/sites-enabled/000-default.conf'
Listen 80
#<IfModule ssl_module>'
# Listen 8443'
#</IfModule>'
#<IfModule mod_gnutls.c>'
# Listen 8443'
#</IfModule>'
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet'
<IfModule mod_ssl.c>
Listen 8443
</Ifmodule>
HTTPS VHost 配置示例
<IfModule mod_ssl.c>
<VirtualHost *:8443>
ServerName mysite.tld
ServerAdmin [email protected]
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /etc/letsencrypt/live/mysite.tld/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mysite.tld/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
HTTP 配置示例
<VirtualHost *:80>
ServerName mysite.tld
ServerAdmin [email protected]
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Redirect permanent / https://mysite.tld/
RewriteEngine on
RewriteCond %{SERVER_NAME} =mysite.tld
RewriteRule ^ https://{SERVER_NAME}{REQUEST_URI} [END,QSA,R=permanent]
</VirtualHost>
我已经在 Server Fault 上问过这个问题,然后被重定向到这里。我收到的答案开始为我指明正确的方向,但我仍然不知道该怎么做才能解决这个问题。最好的回复是
如果你只是访问http://我的网站.tld它会将您重定向到端口 443 (https),而该端口没有任何监听。这解释了您的错误。
有人能理解这一点吗?谢谢!
答案1
您是否尝试过在浏览器中输入域名:8443?
每个浏览器默认使用端口 80 作为 HTTP 页面,使用端口 443 作为 HTTPS 页面,如果要明确指定端口,则必须使用冒号将端口附加到 URL
答案2
mod_ssl
您已指定 Apache 仅在加载时才监听端口 8443 (即此 Apache 具有能力使用 SSL/TLS),但在您的配置片段中,似乎没有任何内容告诉 Apache 实际上使用端口 8443 上的 SSL/TLS。
您可以通过添加到应该使用 SSL/TLS 的块SSLEngine on
来实现这一点:<VirtualHost>
<VirtualHost *:8443>
SSLEngine on
ServerName mysite.tld
# etc...
当您将浏览器重定向到 HTTPS URL 而未明确指定端口号时,浏览器将尝试连接到默认的 HTTPS 端口,即 443。就像纯 HTTP 默认使用端口 80 一样。
您需要更改重定向以包含端口号:
RewriteRule ^ https://{SERVER_NAME}:8443{REQUEST_URI} [END,QSA,R=permanent]