HTTPS 证书配置:从购买到部署

FreeGuideOnline 最新 2026-06-18

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.commail.example.com 等)。
  • 多域名证书(SAN):一张证书支持多个不同的域名(如 example.comexample.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 付费证书的购买流程

  1. 选择 CA:常见的有 DigiCert、Sectigo(原 Comodo)、GlobalSign、GeoTrust 等。
  2. 生成 CSR(证书签名请求):在服务器上生成(见第 4 节),提交给 CA。
  3. 验证域名/组织:按邮件、DNS 记录或文件上传等方式完成验证。
  4. 下载证书文件:签发后会提供证书包,通常包含证书文件(.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.crtca-bundle。为避免客户端信任链问题,建议将两个文件按顺序合并:

cat example.crt ca-bundle > fullchain.crt

Let's Encrypt 用户可直接使用 Certbot 输出的 fullchain.pem,它已包含完整的证书链。

5.2 Nginx 配置

  1. fullchain.crtexample.key 上传到服务器,如 /etc/nginx/ssl/ 目录。
  2. 修改站点配置文件,添加 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;

    # 其他配置...
}
  1. 可选:将 HTTP 流量重定向到 HTTPS。
server {
    listen 80;
    server_name www.example.com;
    return 301 https://$host$request_uri;
}
  1. 检查配置并重载:
nginx -t && systemctl reload nginx

5.3 Apache 配置

  1. 确保 SSL 模块已启用:
a2enmod ssl
  1. 证书文件同上,编辑站点配置文件(如 /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>
  1. 启用站点并重载 Apache:
a2ensite example-ssl.conf
systemctl reload apache2

5.4 IIS(Windows)配置

  1. 获取 .pfx 格式证书:如从 CA 得到的是 .crt.key,需使用 OpenSSL 生成 PKCS#12 文件:
openssl pkcs12 -export -out example.pfx -inkey example.key -in fullchain.crt
  1. 在 IIS 管理器中,选择服务器级别的“服务器证书”,点击“导入”导入 .pfx 文件。
  2. 在网站绑定中,添加或修改绑定:类型 https,选择刚刚导入的证书,端口 443。
  3. 验证配置。

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 访问能力。记得及时关注证书过期时间,让加密保护永不中断。