HTTPS 证书配置:从购买到部署
HTTPS 证书配置:从购买到部署
本教程面向初学者,将带你完成从选择证书类型、获取证书到在主流 Web 服务器上部署的全过程。无论你使用的是 Apache、Nginx 还是 IIS,都能找到对应的配置方法。同时介绍 Let's Encrypt 免费证书的自动续期方案,帮助你以最低成本实现全站 HTTPS。
1. 理解 HTTPS 和 TLS/SSL 证书
在动手操作之前,先厘清几个基本概念:
- HTTPS = HTTP + TLS/SSL,通过加密传输保护数据安全。
- TLS 证书(俗称 SSL 证书):由受信任的证书颁发机构(CA)签发,用于验证服务器身份并建立加密连接。
- 证书链:终端实体证书 → 中间 CA 证书 → 根 CA 证书,浏览器通过逐级验证确认证书可信任。
2. 选择适合你的证书类型
根据验证级别、域名覆盖范围和预算,常见证书可分为以下几类:
2.1 按验证级别划分
| 类型 | 验证内容 | 签发速度 | 适用场景 |
|---|---|---|---|
| 域名验证(DV) | 仅验证域名所有权 | 几分钟~几小时 | 个人网站、博客、小型企业 |
| 组织验证(OV) | 验证域名所有权及组织真实性 | 1~3 个工作日 | 企业官网、电商平台 |
| 扩展验证(EV) | 最严格的验证,显示公司名称在浏览器地址栏 | 3~5 个工作日 | 金融机构、大型电商 |
2.2 按域名覆盖范围划分
- 单域名证书:保护一个完全限定域名(如
www.example.com)。 - 通配符证书:保护一个域名及其所有下一级子域名(如
*.example.com可覆盖www.example.com、mail.example.com等)。 - 多域名证书(SAN):一张证书支持多个不同的域名(如
example.com、example.org)。
2.3 免费证书选择
- Let's Encrypt:提供 DV 级别的免费证书,支持单域名和通配符,90 天有效期,需定期续期。
- Cloudflare SSL:启用 CDN 后自动获得的边缘证书,但服务器和 Cloudflare 之间的连接可能仍需配置。
- ZeroSSL、Buypass Go 等:也提供免费的 DV 证书,可作为 Let's Encrypt 的替代。
提示:对绝大多数个人项目和小型企业而言,Let's Encrypt 的免费 DV 证书已经足够安全。
3. 购买或获取证书
3.1 付费证书的购买流程
- 选择 CA:常见的有 DigiCert、Sectigo(原 Comodo)、GlobalSign、GeoTrust 等。
- 生成 CSR(证书签名请求):在服务器上生成(见第 4 节),提交给 CA。
- 验证域名/组织:按邮件、DNS 记录或文件上传等方式完成验证。
- 下载证书文件:签发后会提供证书包,通常包含证书文件(
.crt)、中间证书(.ca-bundle)和私钥(生成 CSR 时一同产生,务必安全保存)。
3.2 免费证书的获取方式
以 Let's Encrypt 为例,推荐使用自动化客户端:
- Certbot(官方推荐)
- acme.sh(轻量、支持多种 DNS API)
- win-acme(Windows 下使用)
无论哪种工具,核心流程都是发出 ACME 协议请求,完成挑战验证,然后获取证书。
4. 生成 CSR 和私钥
CSR 是申请证书时必须提交的文件,包含你的域名和组织信息。推荐使用 OpenSSL 工具生成。
生成私钥(2048 位 RSA):
openssl genrsa -out example.key 2048
或使用更现代的 ECDSA 算法:
openssl ecparam -genkey -name prime256v1 -out example.key
生成 CSR:
openssl req -new -key example.key -out example.csr
执行时会要求输入国家、省份、城市、组织、公用名(即域名)等信息。公用名务必填写你需要保护的完整域名(如 www.example.com)。
生成后,将 example.csr 的内容提交给 CA,同时务必保护好私钥文件 example.key。
5. 在主流服务器上部署证书
CA 签发证书后,你会得到 .crt 文件及中间证书文件。部署前通常需要合并生成包含完整证书链的文件。
5.1 合并证书链
CA 通常会提供 example.crt 和 ca-bundle。为避免客户端信任链问题,建议将两个文件按顺序合并:
cat example.crt ca-bundle > fullchain.crt
Let's Encrypt 用户可直接使用 Certbot 输出的 fullchain.pem,它已包含完整的证书链。
5.2 Nginx 配置
- 将
fullchain.crt和example.key上传到服务器,如/etc/nginx/ssl/目录。 - 修改站点配置文件,添加 SSL 指令:
server {
listen 443 ssl http2;
server_name www.example.com;
ssl_certificate /etc/nginx/ssl/fullchain.crt;
ssl_certificate_key /etc/nginx/ssl/example.key;
# 推荐的安全参数
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...;
ssl_prefer_server_ciphers on;
# 其他配置...
}
- 可选:将 HTTP 流量重定向到 HTTPS。
server {
listen 80;
server_name www.example.com;
return 301 https://$host$request_uri;
}
- 检查配置并重载:
nginx -t && systemctl reload nginx
5.3 Apache 配置
- 确保 SSL 模块已启用:
a2enmod ssl
- 证书文件同上,编辑站点配置文件(如
/etc/apache2/sites-available/example-ssl.conf):
<VirtualHost *:443>
ServerName www.example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/fullchain.crt
SSLCertificateKeyFile /etc/ssl/private/example.key
# 可选中间证书若已合并到 fullchain.crt 则无需额外配置
# 安全头等
...
</VirtualHost>
- 启用站点并重载 Apache:
a2ensite example-ssl.conf
systemctl reload apache2
5.4 IIS(Windows)配置
- 获取
.pfx格式证书:如从 CA 得到的是.crt和.key,需使用 OpenSSL 生成 PKCS#12 文件:
openssl pkcs12 -export -out example.pfx -inkey example.key -in fullchain.crt
- 在 IIS 管理器中,选择服务器级别的“服务器证书”,点击“导入”导入
.pfx文件。 - 在网站绑定中,添加或修改绑定:类型
https,选择刚刚导入的证书,端口 443。 - 验证配置。
6. 测试 HTTPS 是否正确配置
- 使用在线工具 SSL Labs Server Test(https://www.ssllabs.com/ssltest/)进行全面评估。
- 浏览器访问
https://youdomain.com,检查地址栏是否显示小锁图标。 - 使用命令行工具:
openssl s_client -connect www.example.com:443 -servername www.example.com
查看是否输出完整证书链和握手信息。
7. 自动化续期(Let's Encrypt 等免费证书)
Let's Encrypt 证书 90 天过期,强烈建议设置自动续期。
- Certbot:
certbot renew --dry-run # 先测试
然后在 crontab 中设置定期任务(每天运行一次):
0 12 * * * certbot renew --quiet --deploy-hook "systemctl reload nginx"
- acme.sh:
acme.sh --cron --home /path/to/.acme.sh
acme.sh 默认每天自动检查并续期,无需额外配置定时任务,只需确保 web 服务器重载操作已通过 --reloadcmd 指定。
对于付费证书,需在过期前手动重新申请并替换文件。建议在日程中设置提醒。
8. 常见问题排查
8.1 浏览器提示“证书不受信任”
- 检查证书链是否完整,中间证书是否已正确合并。
- 确保证书没有过期。
- 查看系统时间是否正确。
8.2 混合内容警告
- 页面内资源(图片、CSS、JS)仍在使用
http://协议。 - 修改为
https://或使用协议相对 URL//example.com/resource。 - 开启内容安全策略(CSP)头:
Content-Security-Policy: upgrade-insecure-requests。
8.3 私钥丢失
- 私钥丢失意味着证书无法使用。必须重新生成 CSR,向 CA 申请重发(免费重发通常有限制)。
- 务必在生成时备份私钥,并设置严格权限(例如
chmod 600)。
8.4 通配符证书在多个服务器上使用
- 通配符证书的私钥需要部署到每台服务器,务必通过安全渠道传输。
- 可使用自动化工具分发,或考虑每个子域名使用独立证书。
9. 进阶:提高 HTTPS 安全评分
- 启用 HSTS:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload - 禁用老旧 TLS 协议:只允许 TLS 1.2 和 1.3。
- 使用现代加密套件,优先 ECDHE 前向保密。
- 配置 OCSP Stapling 优化验证效率。
完成以上配置后,你的站点就已具备安全可靠的 HTTPS 访问能力。记得及时关注证书过期时间,让加密保护永不中断。