介绍
本文将介绍如何设置跑分 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+!