如今的网站和应用都已开启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地址访问,那么就去除 # 号后添加或修改
# listen [::]:80; # listen [::]:443 ssl http2;
部署站点
访问到网站 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;
服务器支持弱 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;