首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从零开始建站(2)–HTTPS&HSTS

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+

下篇文章预告:安装网页软件。

首发自网站“出圈儿”

欢迎关注

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180211G0MZDG00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券