Centos升级openssl,开启Http/2

无论是 CentOS 6.X 还是 CentOS 7.X,都是使用的 OpenSSL 1.0.1e , 不满足 HTTP/2 的最低版本要求。而直接升级系统 OpenSSL 版本,可能会引起更多问题,所以我们将 OpenSSL 单独编译安装。默认的openssl版本过低,导致无论你怎么配置ssl网站都会一堆漏洞,评价F甚至更低。

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

openssl 升级部分:

1. 安装依赖环境:

yum install pcre-devel zlib unzip git

2. 查看当前 OpenSSL 版本:openssl version -v

得到结果:

OpenSSL 1.0.1e-fips 11 Feb 2013

3. 下载 OpenSSL 的最新版:

去官网 https://www.openssl.org/source/ 选择最新的就可以。我这边现在是 1.1.0d

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

 

4. 进入目录编译安装:

 

cd openssl-1.1.0c
./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.0d  26 Jan 2017

 nginx配置部分

开启 http2 要求 nginx 版本1.9以后, 找到 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";

生成 dhparam.pem,作用自行百度...

cd /etc/ssl/certs

openssl dhparam -out dhparam.pem 4096

 

配置到 nginx:

ssl_dhparam /etc/ssl/certs/dhparam.pem;

关于协议和 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";

本教程也适用于Apache和其他类似环境,Apache升級好openssl到最新版本,基本上就不用額外的配置了,會自動配置好。

在线检测是否启用了HTTP/2或SPDY:https://tools.keycdn.com/http2-test

暂无评论

发表评论

相关推荐

wordpress文章部分内容加密功能的实现方法

目前wordpress文章的可见性可以设置全部公开,也可以设置密码保护。但是如果是想实现文章的一部分内容加密,需要输入密码才能全部可见的话又如何实现呢? 最简单的方法莫过于使用短代码,网上很多要求关注公众号 ...

筹码力度副图及选股公式

副图指标 DRAWGBK(CLOSE>OPEN,RGB(40,40,40),RGB(40,40,40),1,2,1); NOTEXT箱底:LLV(MA((LOW+HIGH+CLOSE+OPEN)/4,6),88),COLORGREEN,LINETHICK2; X_1:=EMA((HIGH+LOW+CLOSE)/3*(HHV(HIGH,10)-CLOSE)/(HHV(HIG ...

通达信主力控盘主图指标源码

主力控盘主图指标 {阻力支撑线} V1:=ABS((2*CLOSE+HIGH+LOW)/4-EMA(CLOSE,20))/EMA(CLOSE,20); V2:=(1-7/100)*(DMA(CLOSE,V1)); V3:=(1+7/100)*(DMA(CLOSE,V1)); V5:=EMA((LOW+HIGH+CLOSE)/3,5); 支撑:REFDATE(V ...

小米ax3600官方固件安装adguardhome

小米ax3600路由器開啟SSH權限後就可以安裝插件了,目前使用最多的莫過於于shellclash+adguardhome,第一個shellclash安裝過於簡單,就一行代碼的事情,這裡就不過多贅述。adguardhome是一款非常好用的去廣告程序 ...