概述

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

openssl源码sslapitest openssl -a_openssl源码sslapitest


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;}

文章会慢慢更新