如用户为子域名配置通配符SSL证书,是管理多子域名网站时最高效的加密方案。它的核心原理是使用一张证书保护一个主域名下的所有一级子域名(例如 `blog.example.com` 和 `shop.example.com`)。
整个配置流程主要包含以下四个关键步骤:
步骤 核心任务 关键操作与说明
1. 申请前准备 明确需求与生成CSR | 确认证书覆盖范围(如 `*.example.com`),使用OpenSSL等工具生成证书签名请求(CSR)和私钥文件(`.key`)。请务必妥善保管私钥文件。
2. 申请与验证 DNS验证域名所有权 | 将CSR提交给证书颁发机构(CA),并选择DNS-01验证方式。在你的域名DNS管理平台中添加一条主机记录为 `_acme-challenge` 的TXT解析记录,记录值为CA提供的验证字符串。
3. 证书部署 在服务器上安装证书 | 下载CA签发的证书文件(如 `.crt`、`.pem`),将其与私钥文件上传至服务器,并根据Web服务器(如Nginx、Apache)的类型修改配置文件,指定证书和私钥的路径。
4. 验证与维护 测试与自动化续期 | 使用在线工具(如SSL Labs)检查部署是否正确。若使用Let's Encrypt等免费证书,需设置定时任务(如Crontab)自动执行续期命令,避免证书过期。
一、申请前须知
在开始之前,有几个关键点需要你了解:
覆盖范围限制:通配符证书使用 `*` 符号,但它只能匹配一级子域名。例如,`*.example.com` 可以有效保护 `mail.example.com` 和 `www.example.com`,但无法保护 `a.b.example.com` 这样的二级或多级子域名。
验证方式:申请通配符证书必须通过DNS验证(添加TXT记录)来证明你对域名的所有权,因为它需要验证你能否控制域名的DNS解析记录。
二、在主流Web服务器上部署
以下是两种最主流Web服务器的配置参考,你可以根据自己的情况选择。
Nginx 服务器配置示例
1. 将证书文件(如 `fullchain.pem`)和私钥文件(如 `privkey.pem`)上传到服务器目录,例如 `/etc/nginx/ssl/`。
2. 编辑Nginx配置文件(通常在 `/etc/nginx/nginx.conf` 或 `/etc/nginx/conf.d/` 下),在 `server` 块中添加或修改以下内容:
```nginx
server {
listen 443 ssl;
# 关键配置:同时监听主域名和泛域名
server_name example.com *.example.com;
# 指定证书和私钥文件的路径
ssl_certificate /etc/nginx/ssl/example.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/example.com/privkey.pem;
# 其他配置...
}
```
3. 保存文件后,执行 `nginx -t` 测试配置语法是否正确。如果显示 `syntax is ok`,则执行 `systemctl reload nginx` 重载服务使配置生效。
Apache 服务器配置示例
1. 将证书文件(如 `domain_name_public.crt`)和私钥文件(如 `domain_name.key`)上传到服务器,例如 `/etc/ssl/cert/` 目录。
2. 编辑SSL虚拟主机配置文件(如 `/etc/httpd/conf.d/ssl.conf` 或 `/etc/apache2/sites-available/your-site-ssl.conf`):
对于 Apache 2.4.8及更高版本,推荐将证书文件和证书链文件合并为一个 `.pem` 文件后,再进行配置。
apache
<VirtualHost *:443>
ServerName example.com
# 关键配置:使用 ServerAlias 来匹配所有子域名
ServerAlias *.example.com
# 指定证书和私钥文件的路径
SSLCertificateFile /etc/ssl/cert/domain_name_fullchain.pem
SSLCertificateKeyFile /etc/ssl/cert/domain_name.key
# 其他配置...
</VirtualHost>
```
3. 保存文件后,使用 `apachectl -t` 或 `httpd -t` 测试配置语法。确认无误后,重启Apache服务(如 `systemctl restart httpd` 或 `systemctl restart apache2`)。
三、进阶技巧:自动化管理(以Let's Encrypt为例)
对于技术爱好者或需要频繁更新子域名的场景,使用Let's Encrypt这类免费CA配合自动化工具,可以极大简化管理。
1. 安装Certbot:在你的Linux服务器上安装Certbot工具及对应的Web服务器插件。
2. 申请证书:执行以下命令,Certbot会自动通过DNS验证(需DNS服务商支持API)并获取证书。
bash
sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com" -d "example.com"
如果你使用的是Cloudflare、阿里云等支持API的DNS服务商,可以配置Certbot自动添加和删除TXT记录,实现全程自动化。
3. 设置自动续期:Let's Encrypt证书有效期为90天。通过Crontab设置定时任务,可以让证书在到期前自动续期。
bash
# 编辑crontab文件
sudo crontab -e
# 添加以下行,代表每天凌晨3点尝试续期
0 3 * * * /usr/bin/certbot renew --quiet
Certbot在续期成功后,会自动重新加载Web服务器配置。
四、常见问题排查
浏览器提示“证书不匹配”:这通常由两种情况导致:一是你访问了证书覆盖范围之外的子域名(如三级子域名),二是服务器配置中的 `server_name` 未正确包含 `*` 通配符。
浏览器提示“证书不受信任”或“证书链不完整”:这通常是因为未安装中间证书。请检查服务器配置,确保SSL证书链文件(如 `fullchain.pem` 或 `ca-bundle`)已被正确引用。
用户的Web服务器用的是Nginx还是Apache?或者用户目前在哪一步遇到了具体的困难?告诉我你的环境,我可以为你提供更针对性的配置建议。