如今的网站和应用都已开启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;