Patch OpenSSL使其支持CHACH20_POLY1305加密算法

简介:

截止目前的OpenSSL-1.0.2j的版本还不支持Google的CHACHA20加密算法.CHACHA20加密算法相对RC4等相对安全,也针对ARM的手机端进行优化,使其更快更省电。

不过最新的Intel处理器及ARM V8的处理器通过AES-NI指令集对AES-GCM加密算法进行了优化,速度要比chacha20快很多,所以在支持AES-NI指令集的设备上优先使用AES-GCM加密算法,在设备不支持的情况下使用chacha20加密算法。

支持chacha20加密算法的3种方式:

  1. 使用LibreSSL(OpenBSD Fork)

  2. 使用BoringSSL(Google Fork)

  3. 使用CloudFlare提供的Patch


三种方法对比:

  1. LibreSSL能支持OCSP stapling,但是如果首选了CHACHA20作为优先算法,则只要支持CHACHA20算法的都是用CHACHA20算法,支持AES-NI指令集的设备无法发挥出相应的性能

  2. BoringSSL则可以对支持AES-NI指令集的设备优先使用AES-GCM加密算法,但是目前不支持OCSP stapling

  3. 使用CloudFlare提供的Patch则可以自动适应,AES-NI设备使用AES-GCM,不支持的设备使用CHACHA20


环境:

CentOS 6.8 x86_64

OpenSSL-1.0.2j

Nginx-1.10.2


下载CloudFlare提供的Patch

1
wget https: //codeload .github.com /cloudflare/sslconfig/zip/master

下载OpenSSL

1
wget https: //www .openssl.org /source/openssl-1 .0.2j. tar .gz

下载Nginx

1
wget http: //nginx .org /download/nginx-1 .10.2. tar .gz

安装依赖包

1
yum -y  install  gcc gcc-c++ pcre-devel zlib-devel unzip patch

解压文件

1
2
3
unzip master
tar  zxf nginx-1.10.2. tar .gz
tar  zxf openssl-1.0.2j. tar .gz


对OpenSSL进行补丁操作

1
2
3
4
cd  openssl-1.0.2j
patch -p1 < .. /sslconfig-master/patches/openssl__chacha20_poly1305_draft_and_rfc_ossl102j .patch
#此处说明一下须使用同版本的补丁,我这里是1.0.2j就用ossl102j的patch
cd  ..


编译Nginx

1
2
3
cd  nginx-1.10.2
. /configure  --prefix= /usr/local/nginx1 .10.2 --user=www --group=www --with-openssl=.. /openssl-1 .0.2j --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module
make  &&  make  install


如果执行make && make install的时候报错,则需要

1
2
3
4
5
6
7
8
9
10
11
12
13
14
make  -f objs /Makefile
make [1]: Entering directory ` /root/nginx-1 .10.2'
cd  .. /openssl-1 .0.2j \
         &&  if  [ -f Makefile ];  then  make  clean;  fi  \
         && . /config  --prefix= /root/nginx-1 .10.2/.. /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

1
2
3
4
cd  .. /openssl-1 .0.2j 
. /config  --prefix= /root/nginx-1 .10.2/.. /openssl-1 .0.2j/.openssl no-shared
make
make  install_sw LIBDIR=lib

再次执行make && make install就不会报错了


查看结果:

1
2
3
4
5
6
/usr/local/nginx1 .10.2 /sbin/nginx  -V
nginx version: nginx /1 .10.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) 
built with OpenSSL 1.0.2j  26 Sep 2016
TLS SNI support enabled
configure arguments: --prefix= /usr/local/nginx1 .10.2 --user=www --group=www --with-openssl=.. /openssl-1 .0.2j --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module

可以看到的是OpenSSL 1.0.2j.


然后Nginx的配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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进行加密和身份验证

wKiom1gkMyrRLMw7AAHsaGPDzMg254.png


支持AES-NI指令集的手机访问使用AES_128_GCM进行加密和身份验证

wKioL1gkMyvSCcc2AAGh-PYmN1c126.png



本文转自 rong341233 51CTO博客,原文链接:http://blog.51cto.com/fengwan/1871529

相关文章
|
5月前
|
安全 数据安全/隐私保护
使用openssl 模拟ca进行证书的申请和颁发,并使用证书部署网站的安全连接访问,即https的加密通信
使用openssl 模拟ca进行证书的申请和颁发,并使用证书部署网站的安全连接访问,即https的加密通信
46 0
|
5月前
|
存储 算法 安全
20.5 OpenSSL 套接字RSA加密传输
RSA算法同样可以用于加密传输,但此类加密算法虽然非常安全,但通常不会用于大量的数据传输,这是因为`RSA`算法加解密过程涉及大量的数学运算,尤其是模幂运算(即计算大数的幂模运算),这些运算对于计算机而言是十分耗时。其次在`RSA`算法中,加密数据的长度不能超过密钥长度减去一定的填充长度。一般情况下,当RSA密钥长度为`1024`位时,可以加密长度为`128`字节,密钥长度为`2048`位时,可以加密长度为`245`字节;当密钥长度为`3072`位时,可以加密长度为`371`字节。因此,如果需要加密的数据长度超过了密钥长度允许的范围,可以采用分段加密的方法。我们可以将数据包切割为每个`128`
33 1
20.5 OpenSSL 套接字RSA加密传输
|
5月前
|
算法 数据安全/隐私保护
20.4 OpenSSL 套接字AES加密传输
在读者了解了加密算法的具体使用流程后,那么我们就可以使用这些加密算法对网络中的数据包进行加密处理,加密算法此处我们先采用`AES`算法,在网络通信中,只需要在发送数据之前对特定字符串进行加密处理,而在接收到数据后在使用相同的算法对数据进行恢复即可,读者如果有了套接字编程的基础,那么理解这段代码将变得很容易。
26 0
20.4 OpenSSL 套接字AES加密传输
|
6月前
|
算法 搜索推荐 安全
20.3 OpenSSL 对称AES加解密算法
AES算法是一种对称加密算法,全称为高级加密标准(Advanced Encryption Standard)。它是一种分组密码,以`128`比特为一个分组进行加密,其密钥长度可以是`128`比特、`192`比特或`256`比特,因此可以提供不同等级的安全性。该算法采用了替代、置换和混淆等技术,以及多轮加密和密钥扩展等机制,使得其加密效果优秀,安全性高,被广泛应用于各种领域中,如数据加密、文件加密、网络安全等。
70 0
20.3 OpenSSL 对称AES加解密算法
|
6月前
|
算法 数据安全/隐私保护
20.2 OpenSSL 非对称RSA加解密算法
RSA算法是一种非对称加密算法,由三位数学家`Rivest`、`Shamir`和`Adleman`共同发明,以他们三人的名字首字母命名。RSA算法的安全性基于大数分解问题,即对于一个非常大的合数,将其分解为两个质数的乘积是非常困难的。OpenSSL库中提供了针对此类算法的支持,但在使用时读者需要自行生成公钥与私钥文件,在开发工具包内有一个`openssl.exe`程序,该程序则是用于生成密钥对的工具,当我们需要使用非对称加密算法时,则可以使用如下命令生成公钥和私钥。
45 0
20.2 OpenSSL 非对称RSA加解密算法
|
6月前
|
安全 算法 网络安全
20.1 OpenSSL 字符BASE64压缩算法
OpenSSL 是一种开源的加密库,提供了一组用于加密和解密数据、验证数字证书以及实现各种安全协议的函数和工具。它可以用于创建和管理公钥和私钥、数字证书和其他安全凭据,还支持`SSL/TLS`、`SSH`、`S/MIME`、`PKCS`等常见的加密协议和标准。OpenSSL 的功能非常强大,可以用于构建安全的网络通信、加密文件和数据传输,还可以用于创建和验证数字签名、生成随机数等安全应用。它被广泛用于Web服务器、操作系统、网络应用程序和其他需要安全保护的系统中。
44 0
20.1 OpenSSL 字符BASE64压缩算法
|
7月前
|
数据安全/隐私保护 C++ Python
Qt RSA OpenSSL C++ Qt加密解密签字通信系统窗体源码
Qt RSA OpenSSL C++ Qt加密解密签字通信系统窗体源码
125 0
Qt RSA OpenSSL C++ Qt加密解密签字通信系统窗体源码
|
11月前
|
安全 Shell Linux
使用OpenSsl加密反弹shell
当我们使用nc等工具进行反弹shell时,流量都是没经过加密,直接传输的,管理员很容易就能发现我们的异常流量
197 0
|
安全 Java API
【Android 安全】DEX 加密 ( 代理 Application 开发 | 项目中配置 OpenSSL 开源库 | 使用 OpenSSL 开源库解密 dex 文件 )(二)
【Android 安全】DEX 加密 ( 代理 Application 开发 | 项目中配置 OpenSSL 开源库 | 使用 OpenSSL 开源库解密 dex 文件 )(二)
296 0
|
安全 算法 Java
【Android 安全】DEX 加密 ( 代理 Application 开发 | 项目中配置 OpenSSL 开源库 | 使用 OpenSSL 开源库解密 dex 文件 )(一)
【Android 安全】DEX 加密 ( 代理 Application 开发 | 项目中配置 OpenSSL 开源库 | 使用 OpenSSL 开源库解密 dex 文件 )(一)
196 0
【Android 安全】DEX 加密 ( 代理 Application 开发 | 项目中配置 OpenSSL 开源库 | 使用 OpenSSL 开源库解密 dex 文件 )(一)