Nginx实现:HSTS、HPKP头部署方法

一、HSTS作用

HTTP严格传输安全(HTTP Strict transport security,HSTS),配置浏览器对整个域名空间使用HTTPS来加密,它具备以下优点:

 

1. HSTS可以禁止浏览器使用无效证书(浏览器的默认策略是让用户决定是否放行,而用户往往因为不能区分无效是因为配置问题还是攻击而选择继续访问从而导致遭受网络攻击)

 

2. HSTS对以下情况可以仍然保持HTTPS通信:

用户保存了原始网站的书签

不安全的Cookie

HTTPS 剥离攻击

网站内容混布,但需配合CSP(内容安全策略)

 

二、HSTS部署

Nginx 甚至更简单,将下述行添加到你的 HTTPS 配置的 server 块中:

  1. add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

 

nginx https server完整代码:

  1. server {
  2.    listen xxxx:443 ssl;
  3.    server_name www.example.com;
  4.    add_header Strict-Transport-Security "max-age=31536000;includeSubdomains;preload";
  5.    ….
  6. }
  7. server {
  8.    listen xxxx:80;
  9.    server_name www.example.com;
  10.    return 301 https://www.example.com$request_uri;
  11.    …
  12. }

 

hsts htkp

 

三、HPKP作用

互联网的信任机制完全依赖于CA(证书颁发机构)厂商颁发的证书,而任意一个CA厂商都可以签发任意一个域名的证书,导致攻击者可以从CA厂商(可以参考CA厂商入侵史)开始入手。因此需要使用白名单的方式来选择信任的CA,公钥扎钉public key pinning技术的出现,可以允许你强制指定签发证书的CA,只有指定的CA为你的域名签发的证书才能使用。

 

目前该技术有三种实现方式,DANE(基于DNSSEC)、HTTP公钥扎钉和TACK(证书密钥可信保证),HTTP公钥钉扎是使用最多的。

 

四、HPKP部署

下面的例子固定到 COMODO RSA Domain Validation Secure Server CA 及备份的 Comodo PositiveSSL CA 上,30天失效期,包括所有的子域。

 

NGINX 的配置更简短。添加以下行到你的 HTTPS 配置的 server 块中:

  1. add_header Public-Key-Pins 'pin-sha256="klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY="; pin-sha256="633lt352PKRXbOwf4xSEa1M517scpD3l5f79xMD9r9Q="; max-age=2592000; includeSubDomains';

 

nginx https server完整代码:

  1. server {
  2.    listen xxxx:443 ssl;
  3.    server_name www.example.com;
  4.    add_header Public-Key-Pins 'pin-sha256="klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY=";   
  5. pin-sha256="633lt352PKRXbOwf4xSEa1M517scpD3l5f79xMD9r9Q=";   
  6. max-age=2592000; includeSubDomains';  
  7.    ….
  8. }
  9. server {
  10.    listen xxxx:80;
  11.    server_name www.example.com;
  12.    return 301 https://www.example.com$request_uri;
  13.    …
  14. }
    A+
发布日期:2017年04月26日 13:29:02  所属分类:Nginx
最后更新时间:2018-10-19 23:01:10
付杰
  • ¥ 129.0元
  • 市场价:199.0元
  • ¥ 68.0元
  • 市场价:168.0元
  • ¥ 298.0元
  • 市场价:598.0元
  • ¥ 79.0元
  • 市场价:99.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:4   其中:访客  0   博主  0

  1. 头像 NVZA 1

    iis怎么部署HSTS,博主,有没有法子

    • 付杰 付杰

      @NVZA IIS也可以部署,但是要用到第三方模块:http://hstsiis.codeplex.com/ ;网站是英文的;需要翻译!

      • 头像 NVZA 1

        @付杰 是的,博主,我已经下载了这个,但是不知道怎么部署到知更鸟的网站

  2. 头像 傻逼特别多 2

    我想告诉大家一件事情,HSTS是一个头部强制使用https协议,如果你下面有很多的二级域名,不建议使用HSTS,那样的话会造成你的二级域名都打不开的情况,出现“错误代码: ERR_SSL_VERSION_OR_CIPHER_MISMATCH”;除非你的主域名以及二级域名都启动用了HTTPS;二级域名要想也是HTTPS,费用真的是太贵了;