一、结论
网站开启 HTTPS 的主线是:先为实际访问域名申请并获取可用证书,再把证书部署到 Web 服务,最后将 HTTP 请求跳转到 HTTPS。旧站配置证书后如果仍显示“不安全”,通常不是证书没部署,而是页面里还引用了 http:// 开头的图片、脚本、样式、字体或接口,需要逐项改成 HTTPS、相对路径或可信任的替代资源。
二、准备工作
开始前建议确认以下条件:
- 域名控制权或 DNS 解析权限:申请证书时需要完成域名验证,常见方式是添加 DNS 解析记录。
- 服务器或网站服务配置权限:需要能修改 Nginx、Apache、IIS 或站点所在环境的 HTTPS 配置,并能重载服务。
- 证书文件和对应私钥:通常包括证书链文件和私钥文件。不要把私钥当作普通静态资源上传到网站目录。
- 旧站内容修改权限:混合内容可能来自模板、数据库、静态资源、插件或第三方组件,需要能定位并修改。
- 备份:修改站点配置、数据库或模板前,建议先备份当前配置和内容。
如果角色不同,可以这样分工:域名持有者或 DNS 管理员负责完成验证所需的解析;服务器管理员负责证书部署、跳转配置和服务重载;网站开发或内容管理员负责处理页面中的混合内容。
三、操作步骤
1. 确认证书覆盖的域名范围
先确认网站实际访问入口,例如:
https://example.comhttps://www.example.comhttps://blog.example.com
申请证书时要覆盖这些实际访问域名。需要注意,泛域名证书不会天然覆盖所有情况,例如 *.example.com 通常不包含根域名 example.com,也不会自动覆盖任意层级子域名。最终以证书申请范围和实际签发的域名信息为准。
完成域名验证后,下载或获取证书文件。不同服务提供的文件命名可能不同,常见包括证书链文件和私钥文件。
2. 将证书文件放到服务器安全位置
将证书文件上传到服务器,例如:
```bash
/etc/ssl/example.com/fullchain.pem
/etc/ssl/example.com/privkey.pem
```
建议:
- 私钥文件权限尽量收紧,避免其他用户可读取。
- 不要把私钥放进可被公开访问的网站目录。
- 保留一份安全备份,方便配置出错时回滚。
3. 配置 Web 服务启用 HTTPS
以 Nginx 为例,常见配置思路如下:
```nginx
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/example.com/fullchain.pem;
ssl_certificate_key /etc/ssl/example.com/privkey.pem;
其他站点配置保持原有逻辑
}
```
Apache 的常见思路类似:
```apache
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/ssl/example.com/fullchain.pem
SSLCertificateKeyFile /etc/ssl/example.com/privkey.pem
其他站点配置保持原有逻辑
</VirtualHost>
```
如果使用宝塔、Caddy、Tomcat、IIS 或其他环境,核心也是三件事:绑定 443 端口、加载证书和私钥、让 HTTP 请求跳转到 HTTPS。
4. 检查配置并重载服务
修改后不要直接假设生效,先检查配置。
Nginx 常见检查方式:
```bash
nginx -t
```
如果显示语法检查通过,再重载服务:
```bash
systemctl reload nginx
```
Apache 常见检查方式可能为:
```bash
apachectl configtest
```
然后重载:
```bash
systemctl reload apache2
```
或:
```bash
systemctl reload httpd
```
正常结果是:配置检查通过,服务成功重载,443 端口开始提供 HTTPS 服务。
5. 处理旧站混合内容
HTTPS 页面中如果继续加载 http:// 资源,浏览器会提示混合内容。处理方式如下:
站内资源优先改成相对路径或 HTTPS:
```html
<!-- 不建议 -->
<img src="http://example.com/static/logo.png">
<!-- 建议 -->
<img src="/static/logo.png">
<!-- 或 -->
<img src="https://example.com/static/logo.png">
```
检查常见来源:
- 主题模板中硬编码的图片、CSS、JS 地址;
- 数据库文章正文中的旧图片链接;
- CMS 站点地址、媒体库地址仍为 HTTP;
- 第三方统计、地图、视频、字体、支付或客服组件;
- 内联样式中的
background-image; - JavaScript 请求的接口地址;
<iframe>、<video>、<audio>、<source>等标签。
如果资源数量较多,可以在备份后批量替换数据库或内容中的 http://example.com 为 https://example.com。但如果内容中存在序列化数据,不建议直接粗暴替换,最好使用对应 CMS 的迁移工具或可靠插件。
对于无法提供 HTTPS 的第三方资源,优先考虑替换为支持 HTTPS 的服务、将资源迁移到自己站点,或移除该资源。不要通过关闭浏览器安全验证或暴露敏感资源的方式绕过问题。
6. 可选:观察一段时间后再启用更严格的跳转策略
刚完成 HTTPS 时,建议先确认主要页面、登录、表单、后台、图片、接口都正常,再考虑长期 301 跳转和 HSTS。
HSTS 会强制浏览器使用 HTTPS,一旦配置错误且证书不可用,恢复成本较高。确认所有子域名和页面都稳定后,再谨慎启用。
四、如何确认操作成功
不要只看证书申请状态,还要确认线上服务真正生效。
1. 浏览器检查
用无痕模式访问:
```text
https://example.com
https://www.example.com
```
检查:
- 地址栏是否显示安全锁;
- 是否出现“不安全”“证书无效”“混合内容”等提示;
- 开发者工具 Console 是否还有 Mixed Content 报错;
- Network 面板中是否还有
http://资源请求。
2. 检查证书信息
在浏览器证书详情中确认:
- 证书域名是否包含当前访问域名;
- 证书是否在有效期内;
- 证书链是否完整;
- 浏览器是否信任该证书。
也可以在服务器或本地终端检查:
```bash
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -subject -dates
```
正常结果应显示当前线上证书的域名信息和有效时间。
3. 检查 HTTP 跳转
访问:
```text
http://example.com
```
应跳转到:
```text
https://example.com
```
如果保留了 www 或其他入口,也要分别检查。
4. 检查关键页面
至少抽查:
- 首页;
- 文章或商品详情页;
- 登录页;
- 后台入口;
- 表单提交页;
- 包含图片、视频或第三方组件的页面。
只有这些页面都没有混合内容,才算旧站 HTTPS 改造基本完成。
五、常见错误与处理
1. 浏览器提示证书不受信任或证书链不完整
现象:部分电脑浏览器正常,部分手机或旧设备提示不安全;或者浏览器显示证书链不完整。
检查:确认部署的是完整证书链文件,而不是只部署了服务器证书。很多环境需要使用 fullchain 类文件。
修正:重新下载或拼接完整证书链,更新 Web 服务配置后重载。修改前保留原证书文件,方便回滚。
2. 访问 www.example.com 提示证书域名不匹配
现象:根域名正常,但 www 域名报错,或反过来。
检查:查看证书覆盖的域名列表,确认是否同时包含 example.com 和 www.example.com。
修正:重新申请覆盖所需域名的证书,或调整站点入口,使访问域名与证书范围一致。
3. HTTPS 无法访问,提示连接超时或拒绝连接
现象:http:// 可以访问,https:// 打不开。
检查:
```bash
ss -lntp | grep :443
```
或检查服务器防火墙、云安全组是否放行 443 端口。
修正:确认 Web 服务已监听 443,并放行对应防火墙或安全组规则。
4. 配置后仍提示混合内容
现象:首页正常,进入详情页或后台仍提示不安全。
检查:打开开发者工具,查看 Console 和 Network,筛选 http:// 请求。
修正:定位具体资源来源,修改模板、数据库、插件或第三方组件。注意 CDN 缓存、浏览器缓存和 CMS 缓存可能导致修改后短时间内仍看到旧内容。
5. 出现重定向循环
现象:浏览器提示重定向次数过多,页面无法打开。
检查:查看 80 端口和 443 端口配置是否重复跳转;如果站点前有代理、CDN 或负载均衡,还要检查真实协议头是否传递正确。
修正:确保只有 HTTP 请求跳转到 HTTPS,HTTPS 请求不再重复跳转。修改前保留原配置文件,出错时可快速恢复。
六、更简单的方案
如果网站数量较多、证书到期容易忘记,或者希望减少手动申请和续期操作,可以考虑使用 七彩云证书平台。它提供免费 SSL 证书申请与管理能力,支持泛域名证书申请、按平台要求配置 DNS 验证、证书下载和自动续期。
需要注意的是,平台主要帮助完成证书申请和续期管理,并不能替代服务器侧部署。首次使用时,仍需要按平台要求完成初始域名验证,并保持相关授权和解析有效;证书获取后,也仍需要把证书部署到实际 Web 服务,配置跳转,检查混合内容和线上访问结果。
七、常见问题
Q1:证书申请成功,网站就一定开启 HTTPS 了吗?
不一定。申请成功只代表证书已签发或可下载,还需要把证书部署到 Web 服务,重载服务,并确认浏览器访问正常。
Q2:旧站为什么配置证书后还是显示“不安全”?
常见原因是混合内容。页面中仍然加载了 http:// 的图片、脚本、样式、字体、接口或 iframe。需要逐项改成 HTTPS、相对路径或替换资源。
Q3:泛域名证书能不能覆盖根域名和所有子域名?
不能这样默认理解。泛域名证书覆盖范围以申请和签发结果为准,例如 *.example.com 通常不包含根域名 example.com,也不一定覆盖多层级子域名。
Q4:HTTP 跳转应该用 301 还是 302?
测试阶段可以先用临时跳转,确认 HTTPS 页面、表单、后台和资源都正常后,再使用 301 长期跳转。
Q5:自动续期后还需要做什么?
仍需要确认新证书已经部署到实际服务并生效。如果服务器不会自动加载新证书文件,需要在续期后更新证书文件并重载或重启对应服务。
八、总结
网站开启 HTTPS 的关键流程是:先确认证书覆盖实际访问域名,再完成域名验证并获取证书;随后将证书部署到 Web 服务,配置 HTTP 到 HTTPS 的跳转;最后重点清理旧站混合内容。验收时不能只看申请成功,要通过浏览器、证书信息、跳转结果和开发者工具确认网站已经稳定通过 HTTPS 访问。
需要申请或管理SSL证书?
前往七彩云证书平台,按提示完成域名验证,申请、查看和下载证书,并在保留验证解析及相关授权有效的前提下使用自动续期。服务器部署和线上生效仍需按实际环境配置与检查。
前往七彩云证书平台