网站 HTTPS 与 SSL 证书配置完整指南

发布日期:2026 年 6 月 阅读时长:约 25 分钟 作者:XinYuMaTou 团队

导读:2026 年的今天,HTTPS 早已不再是电商网站的"高级功能"——它是所有网站的标配。Google Chrome 从 2018 年开始就把所有 HTTP 网站标记为"不安全",搜索引擎也给予 HTTPS 网站明显的排名优势。本教程带你从零开始理解 SSL/TLS 是什么、如何申请免费证书、如何配置服务器、如何排查常见问题,最终让你的网站挂上小锁图标。

📖 目录

  1. HTTP 与 HTTPS 的本质区别
  2. SSL 证书类型对比(DV/OV/EV/通配符/多域名)
  3. 免费 SSL 证书:Let's Encrypt 申请与自动续期
  4. cPanel 面板一键安装 SSL 证书步骤
  5. Nginx 与 Apache 的 SSL 配置代码示例
  6. 混合内容问题排查与修复
  7. HTTP 到 HTTPS 的 301 重定向配置
  8. HSTS 配置:强制 HTTPS 提升安全性
  9. SSL Labs 评分测试与优化(A+ 标准)
  10. 证书到期监控与自动续期提醒
  11. 常见问题 FAQ
  12. 总结与下一步

1. HTTP 与 HTTPS 的本质区别

HTTP(HyperText Transfer Protocol)是 1991 年诞生的传输协议,它的最大问题是——所有数据都以 明文 传输。就像你把信写在明信片上寄出,沿途任何一个人都能看到内容。

HTTPS(HTTP Secure)则是在 HTTP 外层加了一个 "加密信封",由 SSL/TLS 协议负责加密解密。所有数据在传输前加密,只有接收者能解密。

对比项HTTPHTTPS
默认端口80443
数据传输明文加密(TLS 1.3)
浏览器地址栏显示"不安全"警告显示小锁图标 🔒
是否需要证书不需要必须有 SSL/TLS 证书
SEO 影响负面影响正面加权
数据被篡改风险极高极低
密码输入框浏览器警告"不安全"显示"安全连接"

为什么每个网站都必须用 HTTPS

  1. 保护用户数据:登录密码、表单信息、信用卡号不会在传输中被窃取。
  2. 防止中间人攻击:攻击者无法在网站和用户之间插入恶意广告或钓鱼内容。
  3. SEO 排名优势:Google 2014 年明确将 HTTPS 作为排名信号之一。
  4. 符合浏览器要求:Chrome/Firefox/Edge 对 HTTP 页面显示"不安全"标记,严重影响用户信任。
  5. 现代浏览器功能支持:Service Worker、PWA、地理位置、摄像头麦克风等 API 必须在 HTTPS 下才能使用。
  6. PCI DSS 合规:如果你要在线支付,必须满足支付行业数据安全标准,HTTPS 是最低要求。

⏰ 紧急建议:如果你的网站目前仍然是 HTTP,请今天就改为 HTTPS。Let's Encrypt 提供完全免费的证书,整个过程不到 30 分钟就能完成。

2. SSL 证书类型对比

SSL 证书有多个分类维度,主要看验证级别和可覆盖的域名数量。

按验证级别分类(从低到高)

类型验证方法浏览器显示典型价格适合场景
DV(域名验证)仅验证域名所有权,通常通过邮件或 DNS 记录确认小锁图标免费 - $50/年个人博客、小型企业站
OV(组织验证)同时验证域名和企业的真实存在,审核员会打电话核实小锁图标 + 点击可查看企业信息$80 - $300/年中型企业、正规电商
EV(扩展验证)最严格的审核,验证企业真实存在、合法运营、授权申请小锁图标 + 地址栏显示企业名称$150 - $1000+/年大型企业、银行、金融机构

按覆盖范围分类

类型覆盖范围示例
单域名证书只保护一个完整域名www.example.com,但不保护 mail.example.com
通配符证书保护同一域名下的所有子域名(一个层级)*.example.com = 保护 wwwmailapi
多域名证书(MDC)一张证书保护多个完全不同的域名同时保护 example.commysite.netother.org
多域名通配符多域名 + 通配符的组合(最灵活)一张证书保护 *.siteA.com*.siteB.com

💡 新手建议:对于 90% 的个人站长和中小企业,Let's Encrypt 的免费 DV 证书就完全够用了。它提供与付费 DV 证书相同的加密强度,唯一的区别是有效期只有 90 天(但可以自动续期)。

3. 免费 SSL 证书:Let's Encrypt 申请与自动续期

Let's Encrypt 是由互联网安全研究组织(ISRG)运营的非盈利证书颁发机构。它提供的免费证书目前被全球超过 80% 的网站使用,是互联网 HTTPS 普及的最大功臣。

申请方式概览

你可以选择多种方式来申请和管理 Let's Encrypt 证书:

方式 A:使用 Certbot(推荐给 VPS 用户)

Certbot 是由 EFF 开发的自动化工具,支持几乎所有主流 Linux 发行版和 Web 服务器。

# Ubuntu/Debian 系统安装 Certbot
sudo apt update
sudo apt install certbot python3-certbot-nginx -y

# 如果你用的是 Apache:
sudo apt install certbot python3-certbot-apache -y

# CentOS/RHEL 系统:
sudo dnf install certbot python3-certbot-nginx

# 申请并自动配置证书(以 Nginx 为例)
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

# 按提示回答问题:
# 1. 输入邮箱(用于接收安全通知和到期提醒)
# 2. 同意服务条款 (Y)
# 3. 是否愿意分享邮箱给 EFF (N)
# 4. 选择是否强制 HTTPS 重定向 (2 = 开启推荐)

成功后,Certbot 会告诉你:

Congratulations! You have successfully enabled HTTPS on
https://yourdomain.com

NEXT STEPS:
1. Test your SSL configuration at https://www.ssllabs.com/ssltest/
2. Certbot 会自动添加定时任务(cron),证书到期前 30 天自动续期
3. 验证自动续期是否正常工作:
sudo certbot renew --dry-run

方式 B:使用 acme.sh(推荐进阶用户)

acme.sh 是一个轻量级的 Shell 脚本,相比 Certbot 它不依赖 Python,支持更多 DNS 服务商(阿里云、腾讯云、Cloudflare 等几百家)。

# 安装 acme.sh
curl https://get.acme.sh | sh -s email=your@email.com

# 方式 1:使用 HTTP 文件验证(需要 80 端口)
~/.acme.sh/acme.sh --issue -d yourdomain.com -d www.yourdomain.com \
    --webroot /home/user/yourdomain.com

# 方式 2:使用 DNS 验证(推荐,可申请通配符证书)
# 以 Cloudflare DNS 为例:
export CF_Key="你的 Cloudflare API Key"
export CF_Email="your@email.com"
~/.acme.sh/acme.sh --issue -d yourdomain.com -d "*.yourdomain.com" \
    --dns dns_cf

# 证书签发后,安装到 Nginx 配置目录
~/.acme.sh/acme.sh --install-cert -d yourdomain.com \
    --key-file       /etc/nginx/ssl/yourdomain.com.key \
    --fullchain-file /etc/nginx/ssl/yourdomain.com.crt \
    --reloadcmd     "sudo service nginx reload"

方式 C:使用 Cloudflare(最简单的懒人方案)

如果你的域名 DNS 解析放在 Cloudflare(免费版即可),可以直接在 Cloudflare 控制台开启"Universal SSL",无需配置服务器:

  1. 在 Cloudflare 控制台 → SSL/TLS → 选择 "灵活" 或 "完全" 模式。
  2. Edge Certificates → 开启 "Always Use HTTPS"。
  3. 开启 "Automatic HTTPS Rewrites" 解决混合内容问题。

⚠️ 注意:Cloudflare 的"灵活"(Flexible)模式只加密用户到 Cloudflare 之间的流量,Cloudflare 到你源站之间仍然是 HTTP。如果你服务器里有敏感数据,建议使用"完全"(Full)模式并在源站也配置自签名证书。

4. cPanel 面板一键安装 SSL 证书步骤

对于使用共享主机(cPanel 面板)的用户,图形化操作更加直观:

  1. 登录 cPanel(通常是 https://你的域名:2083)。
  2. 找到 "SECURITY"(安全)区域,点击 "Let's Encrypt SSL""SSL/TLS"
  3. 如果有 Let's Encrypt 图标,点击后直接勾选你的域名,点击 "Issue"(签发)。
  4. 选择验证方式:建议 "HTTP-01"(文件验证),系统会自动处理。
  5. 等待 30 秒,证书签发成功。
  6. 返回 cPanel 首页,找到 "Redirects"(重定向),设置所有 http:// 流量重定向到 https://
  7. 在 "File Manager" 中编辑根目录的 .htaccess 文件,添加强制 HTTPS 规则(见第 7 节)。

5. Nginx 与 Apache 的 SSL 配置代码示例

如果你使用独立服务器或 VPS,需要手动修改 Web 服务器的配置文件。以下是两个主流服务器的标准 HTTPS 配置:

Nginx 配置(/etc/nginx/sites-available/yourdomain.com.conf)

# 80 端口:所有 HTTP 请求 301 重定向到 HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://yourdomain.com$request_uri;
}

# 443 端口:HTTPS 主配置
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name yourdomain.com www.yourdomain.com;

    # SSL 证书路径(Certbot 或 acme.sh 签发后放置的位置)
    ssl_certificate     /etc/nginx/ssl/yourdomain.com.crt;
    ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key;

    # 现代安全配置:只保留 TLS 1.2 和 1.3
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers on;

    # 会话缓存(提升性能)
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets off;

    # OCSP Stapling( stapling 提升握手速度)
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 1.1.1.1 8.8.8.8 valid=300s;
    resolver_timeout 10s;

    # 网站根目录和默认文档
    root /var/www/yourdomain.com;
    index index.html index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # PHP 处理(如果是 PHP 网站,如 WordPress)
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    }

    # 静态资源缓存(提升性能)
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
}

Apache 配置(/etc/apache2/sites-available/yourdomain.com.conf)

<VirtualHost *:80>
    ServerName yourdomain.com
    ServerAlias www.yourdomain.com
    # 所有 HTTP 请求永久重定向到 HTTPS
    Redirect permanent / https://yourdomain.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName yourdomain.com
    ServerAlias www.yourdomain.com
    ServerAdmin webmaster@yourdomain.com
    DocumentRoot /var/www/yourdomain.com

    # 开启 SSL 引擎
    SSLEngine on

    # 证书文件路径
    SSLCertificateFile    /etc/letsencrypt/live/yourdomain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem

    # 现代安全配置
    SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite          ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
    SSLHonorCipherOrder     on
    SSLCompression          off
    SSLSessionTickets       off

    # OCSP Stapling
    SSLUseStapling          On
    SSLStaplingResponderTimeout 5
    SSLStaplingReturnResponderErrors off
    SSLStaplingCache        shmcb:stapling_cache(128000)

    # 开启 HTTP/2
    Protocols h2 http/1.1

    # HSTS(1 年有效期,包含子域名,预加载)
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

    # 目录权限
    <Directory /var/www/yourdomain.com>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    # 启用 gzip 压缩
    AddOutputFilterByType DEFLATE text/plain text/html text/css application/json
</VirtualHost>

配置完成后,测试并重启服务:

# Nginx 测试与重启
sudo nginx -t && sudo systemctl reload nginx

# Apache 测试与重启
sudo apache2ctl configtest && sudo systemctl reload apache2

6. 混合内容问题排查与修复

开启 HTTPS 后最常见的问题就是"混合内容"(Mixed Content)—— 即页面中同时包含加密(HTTPS)和非加密(HTTP)的资源链接。

混合内容的两种类型

排查步骤

  1. 打开 Chrome 浏览器访问你的网站。
  2. 按 F12 打开开发者工具,点击 "Console" 面板。
  3. 搜索包含 "Mixed Content" 的红色警告,记录所有 http:// 的资源链接。

修复方法(从优到劣)

// 方法 1:直接修改链接为 https(推荐)
// 把:
<img src="http://example.com/logo.png">
// 改为:
<img src="https://example.com/logo.png">

// 方法 2:使用协议相对 URL(不推荐,但可快速修复)
// 把:
<script src="http://cdn.example.com/jquery.min.js"></script>
// 改为:
<script src="//cdn.example.com/jquery.min.js"></script>
// 注意:这种方式会继承当前页面协议。但如果资源是第三方的,
// 需要确认对方是否也支持 HTTPS

// 方法 3:在 HTML 中添加 Content-Security-Policy
// 放在 <head> 中,浏览器会自动把所有 http 请求升级为 https
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

// 方法 4:在 Nginx 响应头中添加
add_header Content-Security-Policy "upgrade-insecure-requests; default-src https:" always;

💡 WordPress 用户的快捷修复:安装并启用 "Really Simple SSL" 插件,它会自动检测并替换页面中所有的 HTTP 资源为 HTTPS,同时配置 301 重定向。

7. HTTP 到 HTTPS 的 301 重定向配置

"301 永久重定向" 告诉搜索引擎:"这个页面已经永久搬到新地址了,请把排名转移过来。" 这是 SEO 损失最小的方式。

方法 A:Nginx 配置

server {
    listen 80;
    listen [::]:80;
    server_name yourdomain.com www.yourdomain.com;

    # 方式 1:简单写法(推荐)
    return 301 https://yourdomain.com$request_uri;

    # 方式 2:如果要同时统一到不带 www 的版本
    # return 301 https://yourdomain.com$request_uri;
}

# HTTPS 服务中,把 www 版本统一到主域名(可选)
server {
    listen 443 ssl http2;
    server_name www.yourdomain.com;
    ssl_certificate     /etc/nginx/ssl/yourdomain.com.crt;
    ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key;
    return 301 https://yourdomain.com$request_uri;
}

方法 B:Apache .htaccess 配置

RewriteEngine On

# 强制 HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://yourdomain.com/$1 [R=301,L]

# 同时去掉 www(可选)
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1$request_uri [R=301,L]

# 注意:确保 .htaccess 文件位于网站根目录
# 且 Apache 已启用 mod_rewrite 模块

方法 C:WordPress 后台配置(最简单)

  1. 登录 WordPress 后台,点击 设置 → 常规
  2. 确保 "WordPress 地址(URL)" 和 "站点地址(URL)" 都是 https:// 开头。
  3. 保存更改。WordPress 会自动处理大部分重定向逻辑。

❌ 常见错误:使用 302 临时重定向而不是 301 永久重定向。302 意味着"这个页面临时在那里,很快会回来",搜索引擎不会把排名权重转移过去。一定要确认使用 301 而不是 302。

验证重定向是否正确

访问以下地址,检查是否都最终跳转到 https://yourdomain.com

也可以使用在线工具 https://httpstatus.io/ 来确认返回的是 301 状态码而不是 302。

8. HSTS 配置:强制 HTTPS 提升安全性

HSTS(HTTP Strict Transport Security) 是一项安全策略,它告诉浏览器:"未来一段时间内,只能用 HTTPS 访问我。" 这可以避免用户被降级攻击(在 301 重定向之前被攻击者拦截为 HTTP)。

Nginx 配置

server {
    listen 443 ssl http2;
    server_name yourdomain.com;

    # 基础 HSTS:告诉浏览器 1 年内只通过 HTTPS 访问
    add_header Strict-Transport-Security "max-age=31536000" always;

    # 推荐的完整 HSTS:包含子域名 + 允许被加入浏览器预加载列表
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    # 其他 SSL 配置...
}

Apache 配置

# 在 VirtualHost 或 .htaccess 中添加:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

HSTS 三个参数的含义

参数含义
max-age=31536000浏览器记住这个规则的秒数(31536000 秒 = 1 年)。
includeSubDomains将此规则应用于所有子域名(mail.yourdomain.com、api.yourdomain.com 等)。可选。
preload表示你愿意把你的域名加入浏览器的 HSTS 预加载列表。可选,且需要提交申请。

⚠️ HSTS 警告:一旦开启 HSTS 并设置了较长的 max-age,你的用户在一段时间内将无法访问 HTTP 版本的网站。在确保 HTTPS 配置稳定之前,建议先用较短的 max-age(如 600 秒)测试几天。确认没问题后再逐步增加到更长时间。

9. SSL Labs 评分测试与优化(A+ 标准)

Qualys SSL Labs提供业界最权威的 SSL/TLS 安全测试工具,免费使用:

https://www.ssllabs.com/ssltest/analyze.html?d=yourdomain.com

评分等级

获得 A+ 评分的核心配置清单

把这些配置添加到你的 Nginx/Apache 中,就大概率能拿到 A+:

配置项推荐值
TLS 协议版本只保留 TLS 1.2 和 TLS 1.3(禁用 SSLv3、TLS 1.0、TLS 1.1)
加密套件只保留前向保密(PFS)的 ECDHE 套件
证书密钥RSA ≥ 2048 位,或 ECDSA ≥ 256 位
HSTSmax-age ≥ 31536000 秒(1 年)
OCSP Stapling开启
会话恢复启用 SSL 会话缓存
HTTP/2 支持开启
混合内容页面中不能有任何 http:// 资源
证书链完整且正确(浏览器不提示"缺少中间证书")

Nginx 的 A+ 级别完整配置参考

server {
    listen 443 ssl http2;
    server_name yourdomain.com;

    # SSL 基础
    ssl_certificate     /etc/nginx/ssl/yourdomain.com.crt;
    ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key;

    # 协议:只保留安全的 TLS 1.2 和 1.3
    ssl_protocols TLSv1.2 TLSv1.3;

    # 加密套件:按优先级排序,只保留前向保密的
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';

    # ECDH 曲线
    ssl_ecdh_curve X25519:prime256v1:secp384r1;

    # 会话缓存
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets off;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 1.1.1.1 8.8.8.8 valid=300s;
    resolver_timeout 10s;

    # 安全响应头
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-XSS-Protection "1; mode=block";
    add_header Referrer-Policy no-referrer-when-downgrade;
    add_header Content-Security-Policy "upgrade-insecure-requests";

    # 其他配置...
}

10. 证书到期监控与自动续期提醒

SSL 证书到期后如果不续期,浏览器会显示大红色的安全警告,访客会被吓跑。特别是 Let's Encrypt 只有 90 天有效期,到期监控必不可少。

Certbot 用户的自动续期

好消息:Certbot 在安装时会自动添加 cron 定时任务(通常在 /etc/cron.d/certbot),每天运行两次检查证书是否需要续期。你可以手动测试一次:

# 测试自动续期是否正常工作
sudo certbot renew --dry-run

# 正常输出应该包含:
Congratulations, all simulated renewals succeeded!

# 查看 certbot 定时器状态(systemd 系统)
sudo systemctl list-timers certbot.timer

# 手动触发一次真正的续期(测试)
sudo certbot renew --force-renewal

acme.sh 用户的自动续期

acme.sh 同样在安装时会自动创建 cron 任务:

# 查看 cron 任务
crontab -l

# 应该能看到类似:
# 50 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

# 手动测试续期
~/.acme.sh/acme.sh --renew-all --dry-run

外部监控(强烈建议配置)

即使有自动续期,也建议配置外部监控作为"最后一道防线":

快速查看证书到期时间的命令

# 查看本地证书文件的有效期
openssl x509 -in /etc/nginx/ssl/yourdomain.com.crt -noout -dates

# 查看线上网站的证书有效期(最准确,检查服务器实际在用什么)
echo | openssl s_client -servername yourdomain.com -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates

# 输出示例:
notBefore=Jun 15 00:00:00 2026 GMT
notAfter=Sep 13 23:59:59 2026 GMT
# 即 2026 年 6 月 15 日签发,9 月 13 日到期(90 天有效期)

❓ 常见问题 FAQ

免费证书和付费证书有什么区别?

加密强度完全相同。区别在于:① 验证级别(付费的 OV/EV 提供企业身份验证,在证书详情中显示公司名称);② 保修金额(付费证书通常附带 $10万 - $175万 的 SSL 保险,如因证书漏洞导致数据泄露可申请赔偿);③ 客服支持(付费证书有人工支持);④ 浏览器信任等级相同——DV 证书在现代浏览器中显示的小锁图标与 EV 相同。对于 99% 的中小网站,Let's Encrypt 免费证书已经足够。

证书过期了怎么办?

① 紧急:立即续期——Certbot 用户运行 sudo certbot renew --force-renewal;acme.sh 用户运行 acme.sh --renew-all② 验证是否成功:刷新浏览器查看小锁图标,或运行 openssl 命令查看证书截止日期。③ 分析原因:为什么自动续期失败了?检查 cron 服务是否运行、DNS 记录是否变更、服务器 80/443 端口是否关闭。④ 设置外部监控(见第 10 节),确保下次到期前能收到提醒。

开启 HTTPS 后网站速度变慢了怎么办?

实际上 TLS 1.3 的握手速度已经非常快,加上 HTTP/2 的多路复用,合理配置的 HTTPS 网站甚至比 HTTP 更快。如果你感觉变慢,检查:① 是否开启了 HTTP/2(Nginx 需要在 listen 后添加 http2);② 是否启用了 SSL 会话缓存和会话票证(避免每次握手重新协商);③ 是否开启了 OCSP Stapling;④ 是否部署了 CDN(CDN 边缘节点可以大幅加速 HTTPS 握手);⑤ 是否有不必要的资源重定向链。

为什么浏览器显示"您的连接不是私密连接"?

这是最常见的 SSL 警告,原因通常有:① 证书已过期—— 重新签发即可;② 证书域名不匹配—— 证书是给 www.yourdomain.com 签发的,但你访问的是 yourdomain.com 或其他子域,需要重新申请包含所有子域名的证书;③ 缺少中间证书—— 浏览器不信任你的证书签发者,需要在服务器配置中提供完整的证书链(fullchain.pem 而不是 cert.pem);④ 自签名证书—— 用于测试环境的自签证书不会被浏览器信任;⑤ 系统时间错误—— 用户电脑的时间日期严重错误也会导致证书被判断为"未生效"或"已过期"。

我有多个域名,每张证书都要单独申请吗?

不一定。你可以选择:① 多域名证书(SAN)—— 一张证书保护多个完全不同的域名,Let's Encrypt 每张证书最多可以包含 100 个域名;② 通配符证书—— *.yourdomain.com 可以保护同一主域的所有子域名;③ 多域名通配符—— 最灵活但通常只在付费证书中提供。实际操作中,建议按站点分别申请,出问题时更容易隔离排查。

HTTPS 会影响 SEO 排名吗?

会,而且是正面影响。Google 在 2014 年正式宣布 HTTPS 作为排名因素之一。实际影响中,更重要的是间接影响:HTTP 网站在 Chrome 中会显示"不安全"警告,降低用户点击率和停留时间;而 HTTPS 网站用户信任度更高,点击率更高、跳出率更低。同时,如果不做 301 重定向,HTTP 和 HTTPS 两个版本会被搜索引擎认为是重复内容,分散权重。

我应该申请包含 www 的证书还是不包含?

在申请时,建议同时包含主域名(yourdomain.com)和 www 子域名(www.yourdomain.com)。这在 Certbot 和 cPanel 中都是默认支持的。然后通过 301 重定向把其中一个版本统一到另一个版本(选择带 www 或不带 www 作为标准地址,两者任选其一,但全站要统一)。

Let's Encrypt 会停止免费吗?我需要担心吗?

Let's Encrypt 是由 Mozilla、Google、Cisco、EFF 等大型科技公司赞助的非营利项目,资金充足,运营稳定。自 2015 年推出以来,已签发超过 3 亿张活跃证书,保护了互联网上 80% 的网站。它的使命就是"让所有网站都用上加密",所以不需要担心会停止免费服务

🎯 总结与下一步

恭喜你完成了 HTTPS 的学习。现在把理论变为实践:

上线清单(按顺序执行)

  1. 确认你的域名和主机已经准备好。
  2. 使用 Certbot(VPS)或 cPanel(共享主机)签发 Let's Encrypt 免费证书。
  3. 配置 Web 服务器启用 HTTPS 和 HTTP/2。
  4. 配置 HTTP → HTTPS 的 301 永久重定向。
  5. 排查并修复所有混合内容问题。
  6. 配置 HSTS 响应头(先测试,再逐步增加 max-age)。
  7. 在 Google Search Console 中分别验证 http/https、www/非 www 四个版本,并提交新的 HTTPS sitemap。
  8. 用 SSL Labs 测试,目标是 A 或 A+ 评分。
  9. 配置外部监控(Better Uptime 或 UptimeRobot),确保证书到期前收到提醒。
  10. 配置自动续期,让 Certbot/acme.sh 自动处理。

进一步学习的方向

📚 官方文档和工具:Certbot 官网 certbot.eff.org;Let's Encrypt 官网 letsencrypt.org;SSL Labs 测试 ssllabs.com/ssltest;HSTS 预加载列表 hstspreload.org

← 回到首页