CentOS 7.4下Certbot批量生成SSL证书通用名称重复问题求助
首先,这个问题不是基础域名导致的,而是你使用的Certbot 0.22.2版本的默认行为:当你一次性选择多个站点执行certbot --apache时,它会生成一张多域名SAN证书(Subject Alternative Name证书),把所有选中的域名都添加到证书的SAN扩展列表中,但证书的通用名称(CN)只会设置为你选中的第一个站点域名。
虽然现在主流浏览器会优先匹配SAN列表里的域名,而不是只看CN字段,但如果你的需求是让每个站点都拥有独立的SSL证书(浏览器地址栏显示对应站点的独立域名),可以按照以下步骤操作:
1. 确认当前证书状态
先运行以下命令查看现有证书的详细信息,确认所有域名是否都在同一张证书里:
sudo certbot certificates
输出里会显示证书包含的所有域名,如果所有30个站点域名都列在同一张证书的Domains字段下,就说明是生成了多域名SAN证书。
2. 清理原有多域名证书(可选但推荐)
如果不想保留这张包含所有域名的证书,可以先撤销并删除它:
# 替换成你第一个站点的域名(也就是证书的CN名称) sudo certbot revoke --cert-name your-first-domain.com sudo certbot delete --cert-name your-first-domain.com
3. 为每个站点生成独立证书
你有两种方式实现:
方式一:逐个手动生成
对每个站点单独执行Certbot命令,指定对应的域名:
sudo certbot --apache -d site1.com sudo certbot --apache -d site2.com # 依次类推直到所有站点完成
这种方式适合域名数量不多的情况,或者你需要针对个别站点做特殊配置。
方式二:批量自动生成
如果站点数量多,可以通过脚本批量处理。先提取所有Apache站点的ServerName(假设你的站点配置都在/etc/httpd/conf.d/目录下),然后循环执行Certbot命令:
for domain in $(grep -r "ServerName" /etc/httpd/conf.d/ | awk '{print $2}'); do sudo certbot --apache -d $domain --non-interactive --agree-tos --email your-email@example.com done
--non-interactive:非交互模式,不需要手动确认--agree-tos:自动同意服务条款--email:替换成你的邮箱,用于证书到期提醒
执行完成后,每个站点都会拥有独立的SSL证书,Apache配置也会自动更新为指向对应站点的证书文件。
额外建议:升级Certbot版本
你使用的Certbot 0.22.2是比较老旧的版本(发布于2018年),新版本的Certbot在多站点证书管理上更加灵活,支持更精细的配置(比如指定每个证书的名称、自动判断生成独立或SAN证书等)。如果条件允许,建议升级到最新稳定版,能避免很多旧版本的兼容性问题。
内容的提问来源于stack exchange,提问作者Farmi

