https://domain.com ssl 错误,除非添加异常,否则不会重定向到 www

Cha*_*haz 0 ssl https virtualhost tls apache-2.4

我已经使用 certbot 为我的域创建了一个让我们加密的证书。我确保包含 www 和一些(需要的)子域,因此证书应该对非 www 和 www 有效:

domain.com www.domain.com sub1.domain.com ...
Run Code Online (Sandbox Code Playgroud)

但事实并非如此,如果我尝试访问https://domain.com,它会抛出 ssl 错误。

在证书查看器中(通过 www 访问时),我可以看到 Common Name (CA) domain.com。证书主题替代名称包含非 www 和 www...

所以我不明白为什么它会出现这个错误:

domain.com uses an invalid security certificate.
The certificate is not trusted because it is self-signed.
Error code: SEC_ERROR_UNKNOWN_ISSUER
Run Code Online (Sandbox Code Playgroud)

我确实生成了一个自签名证书,但是对于默认的虚拟主机块(httpd-ssl.conf 中的那个),其他块使用的是让我们加密证书。

我还确保删除了 Firefox 缓存。

我没有添加例外,现在它重定向到https://www.domain.com每次我写https://domain.com

我使用的是 Apache 2.4.23,我的 vhosts 配置如下:

<VirtualHosts *:80>
    Servername domain.com
    Redirect permanent / https://www.domain.com/
</VirtualHosts>

<VirtualHost *:443>
    ServerName domain.com:443
    Redirect permanent / https://www.domain.com:443/
</VirtualHost>

<VirtualHost *:PORT> # 80 and 443
    ServerAdmin webmaster@domain.com
    DocumentRoot "/srv/http/domain.com/www"
    ServerName www.domain.com:443
    Protocols h2 h2c

    <Directory "/srv/http/domain.com/www">
        Require all granted

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

    <IfModule dir_module>
        DirectoryIndex index.php
    </IfModule>

    SSLEngine on
    SSLCertificateFile "/etc/letsencrypt/live/domain.com/fullchain.pem"
    SSLCertificateKeyFile "/etc/letsencrypt/live/domain.com/privkey.pem"
    Header always set Strict-Transport-Security "max-age=15768000"
    ErrorLog "/var/log/httpd/domain.com-ssl_error_log"
    CustomLog "/var/log/httpd/domain.com-ssl_access_log" common
    LogLevel debug
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

Mic*_*ton 5

您没有为对 example.com 的请求提供 Let's Encrypt 证书。

<VirtualHost *:443>
    ServerName domain.com:443
    Redirect permanent / https://www.domain.com:443/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

缺少所有相关的 SSL 指令。

    SSLEngine on
    SSLCertificateFile "/etc/letsencrypt/live/domain.com/fullchain.pem"
    SSLCertificateKeyFile "/etc/letsencrypt/live/domain.com/privkey.pem"
    Header always set Strict-Transport-Security "max-age=15768000"
Run Code Online (Sandbox Code Playgroud)