Nginx - TLS/SSL安全优化HTTPS评级A+指南

概述

本文分享一些个人将https评级从c提升至A+的思路与一些基础优化和漏洞修复,并记录其中遇到的问题

1.HTTPS安全加固指南


1.1 升级openssl版本

openssl版本过低可以会对后续一些安全配置不兼容,原本版本是1.1.0升级到1.1.1就可以了,这里选择1.1.1n

源码包下载路径:

1.1.1操作步骤

# 将源码包上传至服务器/data/soft目录 tar -zxvf openssl-1.1.1n.tar.gz cd openssl-1.1.1n # 配置安装 ./config --prefix=/usr/local/openssl make && make install # 找出原本openssl安装目录,并备份替换 mv /usr/bin/openssl /usr/bin/openssl.old mv /usr/include/openssl /usr/include/openssl.old mv /usr/lib64/libssl.so /usr/lib64/libssl.so.old ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl ln -s /usr/local/openssl/include/openssl /usr/include/openssl ln -s /usr/local/openssl/lib/libssl.so /usr/lib64/libssl.so ln -s /usr/local/openssl/lib/libssl.so /usr/lib64/libssl.so echo "/usr/local/openssl/lib" >> /etc/ld.so.conf # 查看openssl已经是新版本了 openssl version OpenSSL 1.1.1n 15 Mar 2022

1.2 解决Diffie-Hellman 公共密钥过弱

这里需要使用openssl生成2048位公钥,解决公钥过弱的问题

1.2.1操作步骤

# 移动到crt证书和key的存放位置,生成dhparam.pem cd /usr/local/nginx/conf openssl dhparam -out dhparams.pem 2048 chmod -R 755 dhparam.pem # 编辑nginx.conf配置文件 vim nginx.conf # 在https的server块添加 ssl_dhparam /usr/local/nginx/conf/dhparam.pem;

1.3 解决Diffie-Hellman 公共密钥过弱 / 关闭TLSv1.0、TLSv1.1、SSLv3和SSL POODLE[贵宾犬]漏洞的解决办法

SSLv3安全性太低,SSL POODLE[贵宾犬]漏洞也是基于SSLv3实现的所以将其关掉,关掉TLSv1.0和TLSv1.1是为了提高安全性,可以使用TLSv1.2和TLSv1.3

1.3.1操作步骤

# 编辑nginx.conf配置文件 vim nginx.conf # 在https的server块中更改下列两项配置 ssl_protocols TLSv1.2; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; # ssl_protocols取消对TLSv1.0、TLSv1.1的支持时还需要将相对应的配置给删除

具体配置参数可以访问:按照具体的版本信息进行配置

1.4 HSTS严格传输安全协议

1.4.1操作步骤

# 在nginx.conf配置文件server块中开启HSTS协议 server { add_header Strict-Transport-Security "max-age=36000000; includeSubdomains; preload"; }

注解:在客户端请求服务端时,服务端会在请求头中附带Strict-Transport-Security,它的作用是在下次浏览器访问该网址的HTTP时自动转换成HTTPS,该目的是为了防止中间人攻击。 max-age:是指Strict-Transport-Security的有效时间,按秒数计算,需要设置在至少6个月以上。 preload:预加载,这个涉及浏览器的预加载名单,有兴趣可以自行百度。


2.Nginx优化以及基础漏洞修复


2.1 Nginx只允许域名访问

2.1.1操作步骤

# 禁止通过IP访问 server { listen 80 default_server; server_name _; return 404; }

2.2 HTTP头Hostname 攻击

2.2.1操作步骤

server { listen 80; server_name _; if ($http_Host !~* ^IP或者域名$){ return 403; } }

2.3 隐藏版本号

2.3.1操作步骤

http { server_tokens off; }

文章会慢慢更新

经验分享 程序员 微信小程序 职场和发展