Nginx 正确配置网站 HTTPS 加密证书协议

如今的网站和应用都已开启HTTPS,绝大部分网民也对 HTTPS 有所了解,苹果公司2017年1月1日要求强制开启 ATS 和 HTTPS 加密,HTTP 是非常不安全的明文传输协议,任何通过 HTTP 协议传输的数据都以明文形式在网络中“裸奔”,任何数据都处在被窃听、篡改、冒充这三大风险之中,所以开启 HTTPS + IPV6 协议将是未来互联网势不可挡的趋势,网络环境也将更加安全。

Nginx 正确配置网站 HTTPS 加密证书协议插图

证书申请

如果不是购买了 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;

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注