几天来,我一直在尝试让我的网站使用 SSL 和子域名。我一直在谷歌上搜索,但毫无结果。
我在 AWS EC2 实例上设置了一个 Web 服务器,运行带有 apache(httpd)的 amazon Linux 2。
我的服务器上目前有一个 letsencrypt 通配符证书。
已启用以下虚拟主机文件(/etc/httpd/sites-enabled):
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
ErrorLog /var/www/example.com/error.log
CustomLog /var/www/example.com/requests.log combined
Redirect permanent / https://example.com/
</VirtualHost>
<VirtualHost *:80>
ServerName subdomain.example.com
DocumentRoot /var/www/subdomain.example.com
ErrorLog /var/www/subdomain.example.com/error.log
CustomLog /var/www/subdomain.example.com/requests.log combined
Redirect permanent / https://subdomain.example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
ErrorLog /var/www/example.com/error.log
CustomLog /var/www/example.com/requests.log combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
<VirtualHost *:443>
ServerName subdomain.example.com
DocumentRoot /var/www/subdomain.example.com
ErrorLog /var/www/subdomain.example.com/error.log
CustomLog /var/www/subdomain.example.com/requests.log combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
如果我去https://example.com我收到证书错误
但如果我去https://subdomain.example.com它运行良好,显示正确的 letsencrypt 证书。
我不明白为什么该证书不适用于域和子域。
有人能帮我看看问题出在哪里吗?
谢谢。
答案1
通配符证书仅适用于一级域名。如果您有host1.domain.tld
证书host2.domain.tld
,则*.domain.tld
可以使用。但同一证书不适用于host2.domain.domain.tld
任何domain.tld
主机。对于第一台主机,您需要*.domain.domain.tld
与第二台主机相同的证书*.tld
您可以做的是使用subdomain.domain.tld
(这实际上是主机,而不是域)作为证书中的 CN 和domain.tld
备用名称(或任何名称)
答案2
由于 ssl.conf 文件 (/etc/httpd/conf.d/) 中的配置,默认证书文件覆盖了我的证书文件
用我自己的证书文件替换以下两行:SSLCertificateFile /etc/pki/tls/certs/localhost.crt SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
现在一切正常。谢谢大家。