浏览器红色警告?SSL 证书配置教程来了

0 阅读6分钟

打开网站,浏览器地址栏直接飘红、弹出 “不安全” 警告,甚至提示 “您与该网站之间的连接不安全”。用户不敢填信息、不敢下单,网站流量断崖式下跌,SEO 权重持续流失 ——90% 的站长遇到过这问题,核心原因就是SSL 证书配置异常

不同于网上千篇一律的 “点这里、点那里” 流水账教程,本文从报错根源→避坑选型→手把手配置→终极排错全流程拆解,覆盖 Nginx/Tengine 主流服务器,新手也能 1 小时搞定,彻底告别红色警告。

image

一、先搞懂:红色警告到底为啥?

很多人以为 “装了证书就万事大吉”,实则 90% 的报错都不是 “没装证书”,而是配置细节出错。先分清 3 类核心报错,精准解决不盲目:

1. 证书类报错(最常见)

  • NET::ERR_CERT_DATE_INVALID:证书过期,免费证书(如 Let's Encrypt)有效期仅 90 天,忘记续期必报错。
  • NET::ERR_CERT_COMMON_NAME_INVALID:证书域名不匹配,比如证书绑定a.com,却用www.a.com访问;通配符*.a.com不支持多级子域名b.a.a.com
  • 证书链不完整:只装了域名证书,漏了中间证书,手机浏览器必报错,电脑偶尔正常。

2. 配置类报错(最易忽略)

  • 混合内容:HTTPS 页面里加载 HTTP 图片、JS、CSS,浏览器直接判 “不安全”。
  • 443 端口未放行:服务器防火墙 / 安全组没开 443 端口,证书装了也无法访问。
  • 私钥不匹配:证书和私钥(.key)不是一对,上传时搞混文件直接报错。

3. 特殊场景报错

  • 自签名证书:测试环境用没问题,公网访问必飘红,浏览器不认可非权威 CA 签发的证书。
  • 系统时间错误:服务器时间偏差超过证书有效期范围,误判证书过期。

二、避坑第一步:选对证书,少走 80% 弯路

别盲目选 “免费证书” 或 “最贵证书”,按网站类型 + 域名数量选,适配才不报错:

1. 域名验证(DV)证书:个人 / 小型站首选

  • 特点:仅验证域名所有权,10 分钟签发,免费(如 Let's Encrypt、云厂商免费证书)或低价。
  • 适用:个人博客、小微企业官网、单域名站点。
  • 避坑:免费证书必须设自动续期,否则 90 天后必过期报错。

2. 组织验证(OV)证书:企业站标配

  • 特点:验证企业真实信息(营业执照、法人信息),地址栏显示企业名称,信任度高。
  • 适用:企业官网、电商平台、需用户留资的站点。

3. 通配符 / 多域名证书:多子域名必备

  • 通配符(*.a.com):1 个证书覆盖主域名 + 所有二级子域名(如www.a.comadmin.a.com)。
  • 多域名(SAN):1 个证书绑定多个独立域名(如a.comb.com)。
  • 避坑:通配符不支持多级子域名(如b.a.a.com),需单独申请对应证书。

三、手把手:Nginx/Tengine 证书配置(核心实操)

准备工作

  1. 证书文件:从 CA 机构(云厂商 / Let's Encrypt)下载 Nginx 版本证书,解压后得到 3 个文件:

    • xxx.pem:域名证书 + 中间证书(合并后完整证书链)。
    • xxx.key:私钥(绝对不能泄露,权限设为 600)。
  2. 服务器:已安装 Nginx/Tengine,放行 443 端口(防火墙 / 安全组添加规则)。

  3. 域名:已完成 ICP 备案(国内服务器必填),解析到服务器公网 IP。

步骤 1:创建证书目录,上传文件

bash

运行

# 1. 创建专属目录(路径自定义,统一即可)
sudo mkdir -p /etc/nginx/ssl/yourdomain
# 2. 上传证书文件到该目录(用SFTP/FTP工具)
# 3. 设置权限(仅管理员可读,防止泄露)
sudo chmod 600 /etc/nginx/ssl/yourdomain/*

步骤 2:修改 Nginx/Tengine 配置文件

打开配置文件(nginx.confsites-available/xxx.conf),替换以下内容,复制即用

nginx

# 1. HTTPS核心配置(监听443端口)
server {
    listen 443 ssl;
    server_name yourdomain.com www.yourdomain.com; # 绑定所有访问域名

    # 证书路径(替换为你的实际路径)
    ssl_certificate /etc/nginx/ssl/yourdomain/xxx.pem;
    ssl_certificate_key /etc/nginx/ssl/yourdomain/xxx.key;

    # 安全协议配置(禁用老旧不安全协议)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

    # 会话超时(优化性能)
    ssl_session_timeout 10m;

    # 网站根目录(替换为你的站点目录)
    root /var/www/html;
    index index.html index.htm;

    # 解决混合内容:自动跳转HTTP资源到HTTPS
    add_header Content-Security-Policy "upgrade-insecure-requests";
}

# 2. HTTP强制跳转HTTPS(关键!避免用户访问http://飘红)
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri; # 永久重定向
}

image

步骤 3:验证配置,重启服务

bash

运行

# 1. 检查配置是否有误(必做!避免重启失败)
nginx -t
# 显示“syntax is ok”则正常,否则检查路径/域名拼写

# 2. 重启Nginx/Tengine生效
sudo systemctl restart nginx
# Tengine用:sudo systemctl restart tengine

步骤 4:验证效果

浏览器访问https://yourdomain.com,地址栏显示安全锁,无红色警告;点击锁图标→证书,查看有效期、域名匹配正常。

image

四、终极排错:装完仍飘红?按这 5 步查

1. 查证书链是否完整

  • 工具:SSL Labs(输入域名检测),或浏览器 “安全锁→证书→证书路径”。
  • 解决:重新下载 Nginx 版本证书(含中间证书),替换原文件,重启服务。

2. 查混合内容

  • 操作:F12 打开开发者工具→Console,查看 HTTP 资源报错。
  • 解决:将所有http://改为https://;或在配置中添加upgrade-insecure-requests自动升级。

3. 查证书有效期与自动续期

  • 免费证书:用 Certbot 设置自动续期,避免过期。

bash

运行

# 安装Certbot(Ubuntu/Debian)
sudo apt install certbot python3-certbot-nginx
# 设置自动续期(每天执行检查)
sudo crontab -e
# 添加一行:0 3 * * * certbot renew --quiet

4. 查域名匹配

  • 确认证书 SAN 字段包含所有访问域名(裸域名、www、子域名)。
  • 通配符仅匹配二级子域名,多级子域名需单独申请证书。

5. 查服务器时间与端口

  • 时间:同步服务器时间,偏差≤5 分钟。

bash

运行

# 同步时间(CentOS)
sudo chronyc makestep
  • 端口:放行 443 端口,关闭冲突端口。

五、最后总结:3 个核心避坑要点

  1. 证书适配:个人站用免费 DV,企业站用 OV,多子域名用通配符,不盲目高价或免费。
  2. 配置细节强制 HTTPS 跳转 + 完整证书链 + 混合内容处理,3 个缺一必报错。
  3. 长期维护:免费证书设自动续期,每月检查证书有效期,避免过期翻车。