我有一个在 AWS Elastic beanstalk 下运行的 apache。我有几个不同的域,我希望它们都以 HTTPS 中的特定域名结尾。
从其他域(例如https://domain1.com到https://maindomain.com的重定向)返回 SSL 证书错误。
在 apache 中,我有两个虚拟主机配置,一个用于 *:80,一个用于 *:443。两者都是为 maindomain.com 设置的。它们是用 certbot 创建的。
让这个适用于所有其他领域的最佳实践应该是什么?我想我需要为每个域设置一个 VirtualHost,但是如何配置它才能让它与重定向一起工作?
显然,以下示例不起作用,因为它返回 SSL 错误:
<IfModule mod_ssl.c>
<VirtualHost domain1.com:443>
ServerName domain1.com
RedirectPermanent / https://maindomain.com/
</VirtualHost>
</IfModule>
这是默认的 Virtualhost *:80 配置
<VirtualHost *:80>
#ServerName maindomain.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =maindomain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
这是默认的 Virtualhost *:443 配置
<IfModule mod_ssl.c>
<VirtualHost *:443>
#ServerName maindomain.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
ServerName maindomain.com
SSLCertificateFile /etc/letsencrypt/live/maindomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/maindomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
您的帮助将不胜感激。D
要么您获得包含多个名称的证书以涵盖所有域,要么查看您提到的域方案,您将在某些时候收到证书错误。
理论上,浏览器会查看 SAN/CN 以匹配其中找到的名称以及它们用于连接的 DNS 名称,如果不匹配,则会出现证书错误。
如果您使用的其他域是子域,您至少可以有一个多名称证书或通配符。
例如对于域:
不管是什么.example.com ,您都可以使用像 * .example.com这样的通配符,甚至包括一个用于 example.com 的 SAN。
另请注意,如果您有 1 个带有“example.com”的虚拟主机,对到达您服务器的其他名称的请求将由同一个虚拟主机处理,因此您要么拥有一个具有多个名称的证书,它与所有情况都匹配,要么您必须创建一个方案您可以在其中通过不同的虚拟主机和证书涵盖它们。这完全取决于您真正想要涵盖的内容。