我在 Debian 11 上创建了一个运行 Apache 2.4.52 的服务器(它随安装一起提供),我将这个服务器与 Wordpress、Nextcloud 和 Webmin 一起用于我的工作,作为一个组合。
我设置了一个自签名的 SSL 证书来增加它的安全性,因为我打算在互联网和 Nextcloud 上向我的客户宣传该网站,但我无法让 SSL 工作,我在很多地方都看过并且许多设置,但我无法从内部和外部网络访问它。
浏览器显示如下错误:
火狐:SSL_ERROR_RX_RECORD_TOO_LONG
Chrome: ERR_SSL_PROTOCOL_ERROR
我设置自动将 http 转发到 https,它工作正常,如果我在没有证书的情况下访问链接,它会重定向到安全链接,但它总是会出现此错误。
我的 Apache 在端口 3 上工作,因为不幸的是我不能使用默认的 80,我不知道这是否与它有关,因为我一直在一些地方阅读它与此不太相关案例(端口在路由器上打开,都是 3 到 443)。
有人可以帮我吗?欣赏!
注意:我的站点在没有 SSL 的情况下正常工作,无论是在 LAN 还是 WAN 上,我什至想过在没有证书的情况下使用它,只是防火墙,但我不知道这对于公共站点是否安全,我的目标不是获取信息,只为展示内容。
抱歉外行的词汇,我是这方面的初学者,谢谢。
按照我的配置文件:
Apache2.conf
DefaultRuntimeDir ${APACHE_RUN_DIR}
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
AccessFileName .htaccess
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
ServerName 127.0.0.1
端口.conf
Listen 3
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
000-default.conf
<VirtualHost _default_:*>
Redirect "/" "https:// my external ip"
ServerAdmin [email protected]
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ServerName 127.0.0.1
</VirtualHost>
default-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
ssl-params.conf
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
# Disable preloading HSTS for now. You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
# Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off
终于可以用https访问网站了!我更改了000-default.conf文件。
我将
<VirtualHost _default_:*>
更改为 <VirtualHost _default_:3>
并输入 default-ssl.conf 中的 ssl 设置,它可以使用证书访问端口 3。
现在我正试图找到一种方法来验证自签名证书,以便它不会显示不安全的消息,但这很困难。我会在这里创建一个新问题,看看是否有其他人知道任何方式!
非常感谢您的提示,它们非常有帮助!! :D
我在尝试修复某些网站的 403 访问问题后遇到了这个错误。在我的例子中,我在服务器和本地机器上使用 Ubuntu 22.04。 Debian 可能不同。
在此之前使用标准的 Apache 默认 index.html 页面一直运行良好。对于我之前从 Certbot 获得的证书,它运行良好,很容易提供 https 访问权限。
当我上传一个真实网站的文件并将它们复制到 /var/www/html/mysite.com 目录时出现了问题。不管给 webfiles 什么权限,它都不会显示。
我删除了 mysite.com 文件夹并尝试在 apache2/sites-available 中重建所有相关的配置文件。
在此之后我有 SSL_ERROR_RX_RECORD_TOO_LONG 。 只有在重新安装现有的 Certbot 证书后,我才摆脱它。
所以现在我又回到了那个讨厌的 403 访问错误。 . . 我修复了使 /var/www/html/mysite.com 归我的用户帐户所有,并在 www-data 组中,权限为 750.