核心结论:高权重域名配置HTTPS的关键路径, 首先是要选择不匹配域名的CA证书, 其次是服务器端要部署证书与私钥, 然后是配置443端口监听与301重定向, 再往后是强制实施HSTS策略, 最后是进行全链路验证以确保证书无混合内容。

整个这个完成的流程, 它可以在一两个小时的这样一些时间之内去做到完成这个方面的工作。然后在说在当配置是正确了的一个状态之下, 它对那个搜索引擎的安全评级和这个页面信任度这两样东西的影响是非常明显的, 是直接的、是正向的这样一种影响的哈这样的一个说法的。

证书选择与申请

高权重的域名, 应该优先去选择EV证书, 也就是扩展验证证书, 或者是OV证书, 也就是组织验证证书, 千万不要只去做那种仅仅做域名验证的DV证书。为什么这么做呢?

因为EV证书会在浏览器的地址栏上面显示出企业的全称。这对于用户来说, 它的信任度是最高的。所以如果你的站点对于品牌安全方面有着很高的要求的话, 用这个就更好了。

免费方案就是 Let's Encrypt, 它提供的是 RSA 2048位的证书, 而且有效期只有90天, 这种方案适合那些预算比较有限的站点, 你可以通过使用 acme.sh 或者 certbot 这些工具来实现自动续期的效果。

关于付费方案, 您可以选择DigiCert、Sectigo、GlobalSign这些CA机构, 其中EV证书的年费大概在1500到4000元之间, 证书的有效期通常在1年至3年之间。

国密方案的适用情形, 如果是主要服务对象为国内用户的话, 那么是可以选择如信安世纪、沃通这些提供了支持SM2算法的国密证书的服务机构的。这样做能够满足等级保护合规的相关要求。

在提交申请的时候, 你务必要确保CSR文件里面的CN字段, 也就是通用名称, 和主域名是完全一样的, 另外SAN字段需要把所有想要保护的子域名都给包含进去, 比方说给gname.xin去申请证书的时候, SAN里面得同时把gname.xin、www.gname.xin以及所有实际对外提供服务的子域名都写进去, 只要漏掉了任何一个项目, 就会造成对应的子域名在被访问的时候弹出证书不匹配的警告。

服务器端部署(以Nginx为例)

将证书文件(fullchain.pem)和私钥文件(privkey.pem)放置于 /etc/nginx/ssl/ 目录大城群众说事,核心配置如下:

server {
    listen 80;
    server_name yourdomain.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl http2;
    server_name yourdomain.com;
    ssl_certificate     /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
}

关键的约束是, 80端口必须要做301永久重定向到443, 要禁止两个端口同时输出页面的内容, 如果不这样做的话, 那么搜索引擎就会判定存在重复的URL, 这样的话会稀释高权重域名积累的链接信号。

HSTS与混合内容处理

高权重域名配HTTPS完整指南:从证书到上线一步到位(图1)

当 HSTS 第一次被部署的时候, 它里面的max-age这个值建议设置为31536000, 这就代表了一年的意思, 等系统运行得比较稳定了以后, 再往里加上includeSubDomains和preload这两个选项, 并且把情况提交到HSTS Preload List那个名单里面去。

全站上的图片、CSS以及JS之类的那些静态资源, 都必须得要使用HTTPS来进行加载操作, 并且要把页面里头所有的那种以"http://"开头的部分给替换成"https://", 或者是弄成那种协议相对路径的样子。

响应头补充Referrer-Policy: strict-origin-when-cross-domain高权重域名HTTPS配置指南高权重域名HTTPS配置指南,防止Referer跨域泄露。

上线验证清单

1. 在浏览器那里去访问那个网址, 也就是用https加上那个域名, 然后来确认一下那个小锁样的图标是正常出现的, 并且也没有出现有关于证书方面的什么警告信息。

2. 需要把SSL Labs给出的评分目标设置在A级以上, 这个时候要重点去检查协议是否得到了支持, 还有那个证书链的完整性情况到底怎么样。

3. 可以在Chrome控制台中找到Security标签页, 并通过该标签页确认是否存在Active Mixed Content的情况, 结果是没有发现这种不安全的混合内容。

4. 请在Google Search Console这个工具里面, 把HTTPS这种方式设置为默认的网站域名表现方式, 同时进行更新网站地图的操作内容处理。

5. 你要执行curl加粗的-I参数配合http开头的域名这个地址, 来确认一下返回的状态码是不是301, 并且要确认Location头是否指向了https开头的地址。

高频疑难与解决方案

证书续期出现了失败的情况, 大家需要去检查一下acme.sh这个工具所依赖的定时任务, 也就是crontab是不是还好好地活着并正常执行, 另外还要查一查DNS验证里用到的那个子域名的解析记录, 确认一下它目前是否依然指向着正确的IP地址。

旧的版本的TLS协议仍然被客户端进行了连接, 在Nginx的配置里, ssl_protocols这个参数只有保留了TLSv1.2和TLSv1.3这两个协议的选项, 等到执行完reload操作之后, 这个变更才会生效。

在短期内, 权重还没有出现明显的变化。需要明确的是, HTTPS是搜索引擎用来做安全评估的一个组成部分, 它并不是一个直接决定排名的因素。用户必须去确认证书确实没有错误, 页面里没有混合内容, 并且301的跳转链路是完整的。一般情况下, 排名的影响会在往后2到4个星期的时间里逐步显现出来。

在完成相关的配置之后, 我们建议大家每一个季度去做一次审计的动作, 要把这个证书的有效期以及那个HSTS的策略都进行审视和检查, 目的就是要让那些权重比较的高的域名始终处在一个最佳的安全运行的状态之中。