概述
本文分享一些个人将https评级从c提升至A+的思路与一些基础优化和漏洞修复,并记录其中遇到的问题
1.HTTPS安全加固指南
1.1 升级openssl版本
openssl版本过低可以会对后续一些安全配置不兼容,原本版本是1.1.0升级到1.1.1就可以了,这里选择1.1.1n
源码包下载路径:/source/old/1.1.1/index.html
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的支持时还需要将相对应的配置给删除
具体配置参数可以访问:https://ssl-config.mozilla.org/按照具体的版本信息进行配置
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;}
文章会慢慢更新