一个站点正确处理没有 SSL 的 https 请求,另一个站点生成 \x16\x03\x01 错误

一个站点正确处理没有 SSL 的 https 请求,另一个站点生成 \x16\x03\x01 错误

我们有两个网站,sub.example1.com 和 example2.com。这两个网站都没有专门配置为处理 SSL 请求。一个网站 https:/sub.example1.com 通过将对端口 443 的安全请求视为 http 请求,成功处理了对另一个网站的安全请求,https://example2.com,超时并在 apache 日志中记录“\x16\x03\x01”错误。

以下是 /etc/httpd/sites-enabled/ 中 example1 的配置

ServerAdmin webmaster@localhost ServerName sub.example1.com

    DocumentRoot /opt/example1/web/
    DirectoryIndex index.php index.html
    <Directory />
            Options FollowSymLinks
            AllowOverride All
    </Directory>
    <Directory /opt/example/web/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
            # This directive allows us to have apache2's default start page
            # in /apache2-default/, but still have / go to the right place
            #RedirectMatch ^/$ /apache2-default/
    </Directory>


    ErrorLog /var/log/httpd/errorExample1.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/httpd/accessExample1.log combined
    ServerSignature On

~

例如 1 没有 .htaccess 文件。

以下是 /etc/httpd/sites-enabled/ 中示例 2 的配置

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName www.example2.com
    DocumentRoot /opt/example2/web
    <Directory />
            Options FollowSymLinks
            AllowOverride All
    </Directory>
    <Directory /opt/example2/web/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
            # This directive allows us to have apache2's default start page
            # in /apache2-default/, but still have / go to the right place
            #RedirectMatch ^/$ /apache2-default/
    </Directory>

    ErrorLog /var/log/httpd/errorExample2.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/httpd/accessExample2.log combined
    ServerSignature On

以下是示例 2 的 .htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

httpd配置文件

UseCanonicalName Off

NameVirtualHost *:80
# NameVirtualHost *:443
# Include generic snippets of statements
Include conf.d/*.conf

# Include the virtual host configurations:
Include /etc/httpd/sites-enabled/

conf.d/*.conf 条目:

TraceEnable On

服务器名称.conf

ServerName ec2-xx-xx-xx-xxx.compute-1.amazonaws.com

欢迎文件

<LocationMatch "^/+$">
    Options -Indexes
    ErrorDocument 403 /error/noindex.html
</LocationMatch>

我不明白为什么一个将 https 请求转换为 http,而另一个却没有。任何帮助表示感谢。

答案1

两者都没有专门配置来处理 ssl 请求。

在这种情况下,两个服务器都不应该监听端口 443,也就是说,浏览器甚至不应该能够连接到此端口。由于您收到响应或错误消息,因此浏览器显然能够连接到此端口,因此显然设置了某些设置来处理此端口。但第二台服务器上可能设置不正确。

一个站点 https:/sub.example1.com,通过将对端口 443 的安全请求视为 http 请求,成功处理了该请求。

不太可能,因为客户端发送的是 HTTPS 请求。如果没有 SSL(即纯 HTTP),客户端的 SSL 握手将失败,无法执行内部 HTTP 请求。虽然您没有提供完整的设置详细信息,但可能仍是此服务器上全局启用了 SSL,或者前面有一些反向代理在执行 SSL 终止并将请求转发为简单 HTTP。

在 apache 日志中记录“\x16\x03\x01”错误。

“\x16\x03\x01” 是 SSL/TLS 握手的第一个字节。这意味着客户端正在尝试使用 HTTPS 与服务器通信,如果您使用 URL,这是可以预料到的https://。显然,服务器也在监听客户端发送请求的端口,否则 TCP 连接就已经失败了。对于正常https://host/请求,端口将是 443,这意味着您的服务器必须明确设置为在端口 443 上处理纯 HTTP(这不会自行发生,也不会在默认设置中发生)。或者您实际上已经尝试了 URLhttps://port:80/并强制浏览器使用 HTTPS 连接到为纯 HTTP 保留的端口。

我猜测问题出在您未在此处显示的服务器设置部分。

答案2

您可以将 .htaccess 文件添加到示例 1

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

示例 2 看起来像 wordpress,有用于 http 重定向的 wordpress 插件 - 也许它正在使用它

相关内容