简单介绍
截止目前的OpenSSL-1.0.2j的版本还不支持Google的CHACHA20加密算法.CHACHA20加密算法相对RC4等相对安全,也针对ARM的手机端进行优化,使其更快更省电。
不过最新的Intel处理器及ARM V8的处理器通过AES-NI指令集对AES-GCM加密算法进行了优化,速度要比chacha20快很多,所以在支持AES-NI指令集的设备上优先使用AES-GCM加密算法,在设备不支持的情况下使用chacha20加密算法。
支持chacha20加密算法的3种方式:
- 使用LibreSSL(OpenBSD Fork),详见 http://www.libressl.org/
- 使用BoringSSL(Google Fork) ,项目地址:https://github.com/google/boringssl
- 使用 CloudFlare 提供的Patch ,项目地址: https://github.com/cloudflare/sslconfig
三种方法对比:
- LibreSSL能支持OCSP stapling,但是如果首选了CHACHA20作为优先算法,则只要支持CHACHA20算法的都是用CHACHA20算法,支持AES-NI指令集的设备无法发挥出相应的性能
- BoringSSL则可以对支持AES-NI指令集的设备优先使用AES-GCM加密算法,但是目前不支持OCSP stapling
- 使用CloudFlare提供的Patch则可以自动适应,AES-NI设备使用AES-GCM,不支持的设备使用CHACHA20
安装/配置
安装环境
- CentOS 6.8 x86_64
- OpenSSL-1.0.2j
- Nginx-1.13.9
前期准备
下载OpenSSL
mkdir -p /data && cd /data && wget https://www.openssl.org/source/openssl-1.0.2j.tar.gz
tar zxvf openssl-1.0.2j.tar.gz
下载CloudFlare提供的Patch
cd /data
wget -O "sslconfig-mater.zip" https://codeload.github.com/cloudflare/sslconfig/zip/master
unzip sslconfig-mater.zip
下载Nginx
cd /root
wget http://nginx.org/download/nginx-1.13.9.tar.gz
tar zxvf nginx-1.13.9.tar.gz
安装依赖包
yum -y install gcc gcc-c++ pcre-devel zlib-devel unzip patch
对OpenSSL进行补丁操作
cd /data/openssl-1.0.2j
patch -p1 < ../sslconfig-master/patches/openssl__chacha20_poly1305_draft_and_rfc_ossl102j.patch
此处说明一下须使用同版本的补丁,我这里是1.0.2j就用ossl102j的patch
编译Nginx
cd /root/nginx-1.13.9
./configure --user=www --group=www --prefix=/usr/local/nginx-1.13.9 --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_ssl_module --with-http_v2_module --with-openssl=/data/openssl-1.0.2j
问题处理
如果编译报错下面的信息:
make -f objs/Makefile
make[1]: Entering directory `/root/nginx-1.13.9'
cd ../openssl-1.0.2j \
&& if [ -f Makefile ]; then make clean; fi \
&& ./config --prefix=/root/nginx-1.13.9/../openssl-1.0.2j/.openssl no-shared \
&& make \
&& make install_sw LIBDIR=lib
make[2]: Entering directory `/root/openssl-1.0.2j'
Makefile is older than Makefile.org, Configure or config.
Reconfigure the source tree (via './config' or 'perl Configure'), please.
make[2]: *** [Makefile] Error 1
make[2]: Leaving directory `/root/openssl-1.0.2j'
make[1]: *** [../openssl-1.0.2j/.openssl/include/openssl/ssl.h] Error 2
make[1]: Leaving directory `
报错是因为打了补丁的原因,提示Makefile.org比Makefile新,所以停止操作。这个时候我们可以手动编译OpenSSL
cd /data/openssl-1.0.2j
./config --prefix=/root/nginx-1.13.9/../openssl-1.0.2j/.openssl no-shared
make
make install_sw LIBDIR=lib
再次执行nginx编译,就不会报错了
cd /root/nginx-1.13.9
make && make install
查看结果:
/usr/local/nginx-1.13.9/sbin/nginx -V
如果查看OpenSSL 版本是 1.0.2j 说明已经安装成功。
配置Nginx
server {
listen 443;
server_name m.abc.com;
access_log logs/https_m.abc.com.log main;
ssl on;
ssl_certificate keys/server.pem;
ssl_certificate_key keys/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
#定义加密算法
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_session_timeout 5m;
ssl_session_cache builtin:1000 shared:SSL:10m;
location / {
root html;
index index.html;
}
不支持AES-NI指令集的手机访问使用CHACHA20_POLY1305进行加密和身份验证
支持AES-NI指令集的手机访问使用AES_128_GCM进行加密和身份验证
相关推荐
- ngx_waf:一款高大全的 Nginx 网站防火墙模块
- LNMP 编译安装 ngx_pagespeed 模块给网站提速!
- 将网站IP换成 1.1.1.1/1.0.0.1
- 如何彻底禁止百度等搜索引擎收录
- Nginx 查看并发连接数的两种方法
- 解决Nginx出现“Too many open files”的问题
文章作者:喵斯基部落
原文地址:https://www.moewah.com/archives/285.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。非商业转载及引用请注明出处(作者、原文链接),商业转载请联系作者获得授权。