我正在尝试在运行 apache2 的 Ubuntu 18.04 服务器上使用 Let's Encrypt 设置通配符证书,用于域 abc.def.com(不是真实域名)和所有子域(*.abc.def.com)
我已成功使用以下命令手动生成证书:
certbot certonly --manual -d abc.def.com -d *.abc.def.com
我按照说明,为 abc.def.com 域等创建了 TXT 记录,并收到证书已成功创建并保存在 /etc/letsencrypt/live/ 中的确认
我修改了站点的 /etc/apache2/sites-enabled/001-abcsite-le-ssl.conf 以确保它引用了 /etc/letsencrypt/live 中的新证书,如下所示:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName abc.def.com
ServerAdmin [email protected]
DocumentRoot /var/www/abc
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /etc/letsencrypt/live/abc.def.net-0001/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/abc.def.net-0001/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
我重新启动了 apache2 并确认没有报告错误。
service apache2 restart
现在,当我尝试访问https://abc.def.com我收到 SSL_ERROR_BAD_CERT_DOMAIN 错误,提示“此证书仅对 *.abc.def.com 有效”
我不明白为什么,因为我在 certbot 请求中包含了 abc.def.com 和 *.abc.def.com 的选项。
然后,我尝试将我之前生成的非通配符证书(仅适用于 abc.def.com)作为 VirtualHost 配置文件中的另一组 SSLCertificateFile 和 SSLCertificateKeyFile 指令,但没有任何区别。
我究竟做错了什么?
更新:我能够通过设置两个 VirtualHost 部分来强制它使用两个证书工作,如下所示。但如果通配符证书不包含根名称,那么它肯定有问题,对吗?
<VirtualHost *:443>
ServerName abc.def.com
ServerAdmin [email protected]
DocumentRoot /var/www/abc
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /etc/letsencrypt/live/abc.def.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/abc.def.net/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
<VirtualHost *:443>
ServerName localhost.abc.def.com
ServerAlias *.abc.def.com
ServerAdmin [email protected]
DocumentRoot /var/www/abc
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /etc/letsencrypt/live/abc.def.net-0001/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/abc.def.net-0001/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
答案1
这看起来不是正确的使用方式-d
:应该是-d abc.def.com,*.abc.def.com