HTTPS?
简单来说就是浏览器访问网页时地址栏旁边的绿色小锁。
和HTTP的区别就是HTTPS使用了SSL/TLS加密传输。
具体的内容可以查看维基百科-HTTPS。
HSTS?
(引用自MySSL)
在网站全站 HTTPS 后,如果用户手动敲入网站的 HTTP 地址,或者从其它地方点击了网站的 HTTP 链接,依赖于服务端 301/302 跳转才能使用 HTTPS 服务。而第一次的 HTTP 请求就有可能被劫持,导致请求无法到达服务器,从而构成 HTTPS 降级劫持。
这个问题可以通过 HSTS(HTTP Strict Transport Security,RFC6797)来解决。HSTS 是一个响应头,格式如下:
max-age,单位是秒,用来告诉浏览器在指定时间内,这个网站必须通过 HTTPS 协议来访问。也就是对于这个网站的 HTTP 地址,浏览器需要先在本地替换为 HTTPS 之后再发送请求。
includeSubDomains,可选参数,如果指定这个参数,表明这个网站所有子域名也必须通过 HTTPS 协议来访问。
preload,可选参数,后面再介绍它的作用。
HSTS 这个响应头只能用于 HTTPS 响应;网站必须使用默认的 443 端口;必须使用域名,不能是 IP。而且启用 HSTS 之后,一旦网站证书错误,用户无法选择忽略。
HSTS Preload List
可以看到 HSTS 可以很好的解决 HTTPS 降级攻击,但是对于 HSTS 生效前的首次 HTTP 请求,依然无法避免被劫持。浏览器厂商们为了解决这个问题,提出了 HSTS Preload List 方案:内置一份可以定期更新的列表,对于列表中的域名,即使用户之前没有访问过,也会使用 HTTPS 协议。
目前这个 Preload List 由 Google Chrome 维护,Chrome、Firefox、Safari、IE 11 和 Microsoft Edge 都在使用。如果要想把自己的域名加进这个列表,首先需要满足以下条件:
拥有合法的证书(如果使用 SHA-1 证书,过期时间必须早于 2016 年);
将所有 HTTP 流量重定向到 HTTPS;
确保所有子域名都启用了 HTTPS;
输出 HSTS 响应头:
max-age 不能低于 18 周(10886400 秒);
必须指定 includeSubdomains 参数;
必须指定 preload 参数;
即便满足了上述所有条件,也不一定能进入 HSTS Preload List,更多信息可以看这里。通过 Chrome 的 工具,可以查询某个网站是否在 Preload List 之中,还可以手动把某个域名加到本机 Preload List。
部署HTTPS
免费的方法
在上篇文章中部署好了Plesk之后,可以选择使用免费的Symantec SSL或者Let's Encrypt申请SSL证书(在“扩展”里寻找)。在“网站和域名”中的“Let's Encrypt”或者“Symantec SSL”项里填写好相关内容之后就可以使用了。同时可以在“工具与设置”中“SSL/TLS 证书”选择一个免费证书来保护Plesk面板的安全。设置好了之后下次登陆管理界面需要使用“域名:8443"登陆,之后就不会出现安全错误提示了。
多域名/泛域名
如果需要使用多域名或者泛域名,例如在wordpress中部署“子域名”型多站点,或者希望让你的网页上出现一个“安全签章”,那么就要单独购买证书。
我网站上的安全签章
这里推荐到ResellerClub购买,价格比较优惠。
使用Plesk中“网站和域名”里的“SSL/TLS 证书”设置,选择添加证书,在最上面填写好相关内容然后点击申请。
申请证书
把生成的CRS内容粘贴到购买好的证书的申请框中,然后补全内容就可以申请了。
在Comodo申请的证书,申请好之后会给预留的邮箱发送一个邮件,里面包含申请的证书、根证书和中间证书。一共有4个文件。要保证有完整的证书链,需要把这四个文件的内容都上传到Plesk中。
Plesk的证书上传部分只提供了证书和CA证书两个部分,所以要先对证书进行合并再上传。
上传证书部分
把申请的证书传到“证书”里面,然后把其他三个文件用文本编辑器打开(例如notepad++),按照级别从低到高进行排列,排列成这样:
-----BEGIN CERTIFICATE-----
COMODO RSA Domain Validation Secure Server CA
(由上级中间证书开具的中间证书)
-----END CERTIFICATE-----
COMODO RSA Certification Authority
(由根证书开具的中间证书)
-----BEGIN CERTIFICATE-----
AddTrust External CA Root
(根证书)
-----END CERTIFICATE-----
把排列好的文件保存为.crt结尾的文件,然后上传到CA证书中。
PS:如果不使用Plesk的话,apache和nginx都需要单独指定证书链,证书链文件是从域名证书到第一级中间证书的部分。
配置HSTS
在“网站和域名”页面,“apache和nginx设置”中,到最下面的“其他nginx”指令中加入
其中“max-age=”后面的数字可以更改,但是不要小于10886400。
配置加密套件
plesk没有提供独立的加密套件设置,所以需要手动修改。
ssh连接服务器,修改/etc/nginx/conf.d目录下的ssl.conf文件,把ssl_ciphers这行改成下面这样(兼容到ie6/xp)
如果只需要使用最新的加密套件,可以改成下面这样
之后再把下面的ssl_protocols部分改成
来防止SSLv2、SSLv3攻击。
测试
测试结果A+
下篇文章预告:安装网页软件。
首发自网站“出圈儿”
欢迎关注
领取专属 10元无门槛券
私享最新 技术干货