如今的网站和应用都已开启https,绝大部分网民也对https有所了解,苹果公司2017年1月1日要求强制开启ATS和HTTPS加密,HTTP是非常不安全的明文传输协议,任何通过HTTP协议传输的数据都以明文形式在网络中“裸奔”,任何数据都处在被窃听、篡改、冒充这三大风险之中,所以开启HTTPS + IPV6协议将是未来互联网势不可挡的趋势,网络环境也将更加安全。
证书申请和配置
如果不是购买了DV\OV\EV收费版证书,只是想要使用加密证书,这里推荐使用 OHTTPS,因为它支持腾讯云、阿里云、七牛、宝塔一键部署,验证域名申请,证书到期自动续费。
到 OHTTPS 申请好证书后,将 cert.key、cert.cer、fullchain.cer 下载到本地。
使用SFTP登录到服务器 /usr/local/nginx/conf/ssl/ 目录下,新建文件夹存放加密证书,如:/usr/local/nginx/conf/ssl/opssh
然后到/usr/local/nginx/conf/ssl/ 目录下,新建文件:dhparam.pem(密钥交换),内容如下:
-----BEGIN DH PARAMETERS-----
MIIBCAKCAQEA128R9uyGLlLfuEO9sWtv0q5nbtVxiThJjEHbC/OeMt8dF7pFQ4EE
HZzr2Yx8dEAjsqJY+0VPRRtwGJ6igXxXLlJPPfE4IEuGcBIO2d/2fROAgPaaGiQX
JTjl7JmqBkLmvO4WR9nsZ9bWub5Xm1uSvJcIJ7Yaz5dEu04WDhkg8pQI/Nj5EFXQ
Moi9ChFriIhe8euZqKd3P9V3ljvvaUg8Z7LTwHA3EngdMdmaj5fP2DtA1X9swlFA
XUrb61HKlf3/iCmmxqhU6AG/CPzoxl87cONKiT5Kj4jYPsXk1VYTs+x7jy1n6kx8
aGNTCXRKVWQOvOBQOwiFdSSFODbuTFOnYwIBAg==
-----END DH PARAMETERS-----
IPV6协议开启
如:服务器支持IPV6地址访问,那么就去除 # 号后添加或修改
# listen [::]:80;
# listen [::]:443 ssl http2;
部署站点SSL证书
访问到网站 conf 配置文件,conf文件具体位置在 " /usr/local/nginx/conf/vhost/ " 目录文件中,找到对应站点的conf文件(如没有站点配置文件,请新建后进行修改),修改设置如下:
server
{
listen 80;
listen 443 ssl http2;
# 以上为IPV4 80 443端口监听
listen [::]:80;
listen [::]:443 ssl http2;
# 以上为IPV6 80 443端口监听
server_name opssh.cn www.opssh.cn;
index index.php index.html index.htm default.php default.htm default.html;
root /home/wwwroot/opssh.cn;
# 以上分别为 网站域名设置、默认访问格式、网站程序存放路径
#error_page 404/404.html;
#SSL-START SSL相关配置,请勿删除或修改带注释的404规则
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#REWRITE-START
if ($host ~ '^www.opssh.cn'){
return 301 https://opssh.cn.cn$request_uri;
}
#REWRITE-END
# 以上分别为 非443端口访问跳转443端口,301跳转
# 443跳转,如:http://opssh.cn -> https://opssh.cn
# 301跳转,如:https://www.opssh.cn -> https://opssh.cn
ssl_certificate /usr/local/nginx/conf/ssl/opssh/fullchain.cer;
ssl_certificate_key /usr/local/nginx/conf/ssl/opssh/cert.key;
# 证书存放路径,分别为 中间证书文件、私钥文件
ssl_session_timeout 5m;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
# TLS协议
ssl_prefer_server_ciphers on;
ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
# 加密套件
ssl_session_cache builtin:1000 shared:SSL:10m;
# openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
# 密钥交换文件
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
include rewrite/php.conf;
# 网站规则设置文件
#error_page 404 /404;
# Deny access to PHP files in specific directory
#location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
include enable-php.conf;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
}
location ~ .*\.(js|css)?$ {
expires 12h;
}
location ~ /.well-known {
allow all;
}
location ~ /\. {
deny all;
}
access_log off;
}
配置内容解说:
添加add_header
#减少点击劫持
add_header X-Frame-Options DENY;
#禁止服务器自动解析资源类型
add_header X-Content-Type-Options nosniff;
#防XSS攻击
add_header X-Xss-Protection 1;
如果使用https加密检查提示下面内容,可对应修改;
服务器支持弱Diffie-Hellman(DH)密钥交换参数,修改后后支持http/2
ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
修改为:
ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
开启 HSTS 功能,max-age建议是15768000,或者是63072000
add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
配置ssl_session_cache,配置共享会话缓存大小,视站点访问情况设定
ssl_session_cache builtin:1000 shared:SSL:10m;
关闭TLS 1.0,开启支持TLS 1.3
ssl_protocols TLSv1.2 TLSv1.1 TLSv1.3;
OCSP Stapling开启
ssl_stapling on;