如何升级 openssl 增强 SSL 安全性

9月16日 · 2017年
PD14 AD

很多童鞋在使用阿里云的 ECS 服务器的时候,通常都会使用 CentOS 的系统,而且很多童鞋在部署环境前,可能最多的也只是使用一个 yum update 对 CentOS 做一个更新升级,并不会知道,其实 CentOS 自带的 openssl 版本是比较低的,这样就会导致你无论如何去配置自己网站的 ssl ,都会被阿里云骑士提示有一堆漏洞,并且 SSL 的安全评级可能会是 F 甚至更低。

 

 

测试ssl安全性地址:https://www.ssllabs.com/ssltest/

 

配置完成后,测试结果如图:

 

YephyBlog SSL Report

 

 

openssl 升级部分

 

1、 安装依赖环境

yum install pcre-devel zlib unzip git

 

2、 查看当前 OpenSSL 版本

openssl version

得到结果:

OpenSSL 1.0.1e-fips 11 Feb 2013

 

3、 下载 OpenSSL 的最新版

各位童鞋可以去官网 https://www.openssl.org/source/ 查看最新的版本。我这边现在是 1.1.0f

wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz
tar -zxvf openssl-1.1.0f.tar.gz

 

4、 进入目录编译安装

cd openssl-1.1.0f
./config --prefix=/usr --openssldir=/etc/ssl --libdir=lib shared zlib-dynamic
make depend
make && make install

如果不能 make 就说明没有安装 gcc ,解决办法:

yum install gcc gcc-c++ autoconf automake

如果提示: zlib.h: No such file or directory 就说明缺少 zlib 的头文件, 开发包没有安装,需要执行:

yum install zlib (系统默认已经装上)
yum install zlib-devel

 

5、 拷贝 so 库到指定位置

cp /usr/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
cp /usr/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

 

6、 查看 OpenSSL 最新版本

openssl version
OpenSSL 1.1.0f  25 May 2017

 

 

nginx 配置部分

 

这里我们只贴出与 SSL 相关,其他内容请各位童鞋依据原配置,不要随意修改!开启 http2 要求 nginx 版本1.9以后, Yephy 之前向大家推荐的 Oneinstack 一键环境部署脚本默认的版本是1.12.1,因此这个大家不必担心。

开启 https 的教程,参考这里:https://www.yephy.com/p/Open-the-https-visit-tutorial.html

上次的教程,可能我写得太过仓促,有些地方很多童鞋不懂。今天,我们现在要对相关参数进行一次修改和补充:

我们依然要找到 conf 配置文件的 server {} 位置进行修改,我这里放出修改后的内容,下面再逐一解释每一行的内容:

  listen 443 ssl http2;
  server_name yourdomain.com;
  ssl on;
  ssl_certificate /usr/local/nginx/cert/yourdomain.pem;
  ssl_certificate_key  /usr/local/nginx/cert/yourdomain.key;
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout  10m;
  ssl_stapling on;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA";
  ssl_prefer_server_ciphers on;
  add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

关于 SSL 证书,我们上次的教程已经讲解了,只需要对应相关的文件路径就好了:

  ssl_certificate /usr/local/nginx/cert/yourdomain.pem;
  ssl_certificate_key  /usr/local/nginx/cert/yourdomain.key;

关于协议和 ciphers 选择,ciphers 的选择比较关键,这个配置中的 ciphers 支持大多数浏览器,但不支持 XP/IE6。

  ssl_stapling on;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA";
  ssl_prefer_server_ciphers on;

关于 SSL session 的配置:

  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout  10m;

最后,HSTS 配置,这个对评分影响也比较大,但如果开启这个,需要全部网站都开启 https :

  add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

 

 

结语

到这里,相信很多童鞋都已经完成了配置工作,那个就 service nginx reload 重新加载 Nginx 配置文件,去做一下测试,看看效果吧!?

 

0 条回应
验证码
输入运算符及数字使等式成立
{{comment.validate_num1}} = {{comment.validate_num2}}
点赞 确定
退出登录?
取消 确定