调教 A+ 跑分的 ECC + CT 加持版 OpenResty
本文最后更新于 2486 天前,其中的信息可能已经有所发展或是发生改变。

介绍

本文将介绍如何设置跑分 A+ 的 OpenResty 设置以及ECC、双证书和Certificate Transparency的部署教程。

教程

申请 RSA 证书请查看:免费申请阿里云 – 赛门企业级铁克 SSL 证书!,这里我就不多阐述了,非常的简单。

ECC证书申请

这里我们使用 Neilpang/acme.sh 作为申请 Let’s Encrypt 的免费 ECC 证书。

运行下面代码下载 acme.sh:

git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh

这里我们使用 dns 方式来验证域/Users/ivmm/Pictures/未命名文件夹/1.png
名的所有权,运行:

./acme.sh  --issue  --dns   -d acmet.mf8.biz --keylength ec-256

如果是 根域名和www申请就是:

./acme.sh  --issue  --dns   -d mf8.biz -d www.mf8.biz --keylength ec-256

下面是演示GIF:

中间得到一句:

[Thu Jun 15 09:00:16 UTC 2017] Domain: '_acme-challenge.acmet.mf8.biz'
[Thu Jun 15 09:00:16 UTC 2017] TXT value: 'IWuFBesaK6GOVa5_oMqBvX_Di8H-_taiwOA5r-hNOG8'

Domain: 就是要添加的域名子域名,_acme-challenge.acmet 就是
TXT value: 即添加为 txt 类型,内容为:IWuFBesaK6GOVa5_oMqBvX_Di8H-_taiwOA5r-hNOG8

等待DNS生效后,然后再运行:

./acme.sh  --renew -d acmet.mf8.biz --keylength ec-256 -ecc

mkdir -p /usr/local/openresty/nginx/conf/ssl/

./acme.sh  --installcert  -d acmet.mf8.biz   \
        --keypath   /usr/local/openresty/nginx/conf/ssl/acmet.key \
        --fullchainpath /usr/local/openresty/nginx/conf/ssl/acmet.crt \
        --reloadcmd  "nginx -s reload" \
        --ecc

可以辅助查看的双证书教程:生成、签署 ECC 证书,Nginx 部署双证书教程
acme.sh 的官方中文文档L:https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E

部署 Certificate Transparency

Certificate Transparency 部署难度较高,需要境外服务器辅助,除了提高安全性并不会提升性能,如果没有 EV 证书其实也可以不部署:

教程:https://bbs.mf8.biz/nginx-certificate-transparency/#toc_5

只需要看设置部分就行,编译部分在编译 OpenResty 的时候就已经编译进去了

设置

做完准备工作,我们就要开始为虚拟主机设置 HTTPS + HTTP/2 了!

这里我们以 www.mf8.biz 为例,下面是 HTTPS 虚拟主机配置文件,设置了 nginx-ct 和 ECC 双证书以及一些高级HTTPS安全设置:

server {

  ##开启 HTTPS 和 HTTP/2
  listen 443 ssl http2;

  ##ECC证书部分
  ssl_certificate /usr/local/openresty/nginx/conf/ssl/www.mf8.biz-ecc.crt; #ECC证书
  ssl_certificate_key /usr/local/openresty/nginx/conf/ssl/www.mf8.biz-ecc.key; #ECC密钥
  ssl_ct_static_scts /usr/local/openresty/nginx/conf/ssl/sct-1/; #ECC证书的透明证书


  ssl_certificate /usr/local/openresty/nginx/conf/ssl/www.mf8.biz.crt; #RSA证书
  ssl_certificate_key /usr/local/openresty/nginx/conf/ssl/www.mf8.biz.key; #RSA密钥
  ssl_ct_static_scts /usr/local/openresty/nginx/conf/ssl/sct-2/; #RSA证书的透明证书

  ##SSL增强安全设置部分
  add_header Strict-Transport-Security max-age=15768000; #HSTS设置
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
  ssl_ct on; #开启透明证书
  ssl_prefer_server_ciphers on;
  ssl_session_timeout 10m;
  ssl_session_cache builtin:1000 shared:SSL:10m;
  ssl_buffer_size 1400;
  ssl_stapling on;
  ssl_stapling_verify on;

  server_name www.mf8.biz mf8.biz;
  access_log off;
  index index.html index.htm index.php;
  root /data/wwwroot/mf8;
  
  location ~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv|mp4)$ {
  valid_referers none blocked *.mf8.biz www.mf8.biz mf8.biz;
  }


  ##PHP
  location ~ [^/]\.php(/|$) {
      fastcgi_pass unix:/run/php/php7.1-fpm.sock;
      fastcgi_index index.php;
      include fastcgi.conf;
      fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/:/proc/";
    }

  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
    expires 30d;
    access_log off;
  }
  location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
  }
  location ~ /\.ht {
    deny all;
  }
}

将 HTTP 跳转到 HTTPS:

server {
  listen 80;
  server_name www.mf8.biz mf8.biz;
  access_log off;
  index index.html index.htm index.php;
  rewrite ^/(.*)$ https://bbs.mf8.biz/$1 permanent;
}

跑分

https://www.ssllabs.com/index.html 可以进行网站 HTTPS 的跑分,这么一番下来肯定是 A+!

上一篇
下一篇