SSL 在域上,但不在子域上

Alp*_*tus 1 ubuntu ssl https apache2

我有一个在https://www.example.org/上运行的网站, 我打算创建http://games.example.com/ [无 SSL]。

我在 Ubuntu 16 服务器上运行 Apache 2。

我希望子域保持 http,主域保持 https。我该怎么办?

目前设置如下:

000-default.conf:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect permanent "/" "https://www.example.com/"
    #SSLProtocol all -SSLv2 -SSLv3
    ServerAdmin contact@example.com
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:80>
    ServerName games.example.com
    ServerAdmin contact@example.com
    DocumentRoot /var/www/games
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:80>
    ServerName planets.example.com
    ServerAdmin contact@example.com
    DocumentRoot /var/www/2moons
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

默认 ssl/conf:

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
                            ServerAdmin contact@example.com
                            ServerName www.example.com

                            DocumentRoot /var/www/html

                            ErrorLog ${APACHE_LOG_DIR}/error.log
                            CustomLog ${APACHE_LOG_DIR}/access.log combined

                            SSLEngine on

                            SSLCertificateFile      /etc/ssl/certs/certificate.crt
                            SSLCertificateKeyFile /etc/ssl/private/private.key

                            <FilesMatch "\.(cgi|shtml|phtml|php|jpg)$">
                                                            SSLOptions +StdEnvVars
                            </FilesMatch>
                            <Directory /usr/lib/cgi-bin>
                                                            SSLOptions +StdEnvVars
                            </Directory>

                            BrowserMatch "MSIE [2-6]" \
                                                         nokeepalive ssl-unclean-shutdown \
                                                         downgrade-1.0 force-response-1.0

</VirtualHost>
</IfModule>
Run Code Online (Sandbox Code Playgroud)

Ste*_*ich 14

鉴于有问题的域似乎是followarmy.com我尝试访问的http://games.followarmy.com/,它首先起作用。但是当访问https://followarmy.com然后http://games.followarmy.com/不再工作。原因是https://followarmy.com为域设置HSTS:

Strict-Transport-Security: max-age=63072000; includeSubdomains
Run Code Online (Sandbox Code Playgroud)

由于includeSubdomains设置了任何未来的访问http://games....将被浏览器自动重写为https://games....。但是,当尝试使用 https 访问站点时,它将失败,因为证书的主题与站点不匹配。有关 HSTS 标头的更多信息,请参阅文档

请注意,从您显示的不完整配置中无法看到此信息。从这个配置也不能看出您的 SSL 设置已损坏。相反,如果从 Let's Encrypt 发送叶证书和必要的中间证书,则您只发送叶证书。有关更多详细信息,请参阅ssllabs 报告

  • @AlphabetoPT:HSTS 标头不会自动设置。它在您的配置中的某处被明确设置,[like here](https://raymii.org/s/tutorials/HTTP_Strict_Transport_Security_for_Apache_NGINX_and_Lighttpd.html#Set_up_HSTS_in_Apache2)。它没有设置在您在此处显示的(已编辑)配置的子集中,因此我无法为您指明配置中的确切位置。您需要自己查看完整配置以找到并修复此标头。 (2认同)