引言
- Openssl是TLS协议进行报文加密,安全通讯而用到的开源代码包,代码主要由C语言编写,我个人也只看了其中一部分代码,当作工具使用,没有深入分析。
其维基百科的链接:https://zh.wikipedia.org/zh-cn/OpenSSL,
openssl的官网wiki链接:https://wiki.openssl.org/index.php/Enc#Cipher_alogorithms - Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。与旧版本(≤ 2.2)的Apache不同,Nginx不采用每客户机一线程的设计模型,而是充分使用异步逻辑从而削减了上下文调度开销,所以并发服务能力更强,其中也有利用到openssl的代码进行安全通讯。
安装与使用
需要注意的是,接下来的编译,安装都将支持TLS1.3协议,由于TLS1.3目前还未完全成熟,因此需要我们进行额外的编译操作来使系统支持。
1. openssl
1.1 openssl 编译与安装
1.1.1 编译安装openssl 1.1.1版本, 来支持TLS1.3协议。
- openssl的源码链接:https://www.openssl.org/source/, 选择 Openssl 1.1.1版本,目前这个版本支持最新的TLS1.3协议草案。
编译安装指令:
#查看openssl的版本信息
pi@raspberrypi:~ $ openssl version
OpenSSL 1.0.1t 3 May 2016
# 卸载系统自带的openssl,避免链接冲突问题。
sudo apt-get remove openssl
wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
tar -xf openssl-1.1.1g.tar.gz
cd openssl-1.1.1g
./Configure # 在需要确定编译器环境的时候,请执行./config, 参阅Q&A
make
make install
查看openssl的最新版本信息, 查看openssl支持的加密套件,并确定是否支持 TLS1.3协议
pi@raspberrypi:/usr/local $ openssl version
OpenSSL 1.1.1g 21 Apr 2020
pi@raspberrypi:/usr/local $ openssl ciphers -V
0x13,0x02 - TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD
0x13,0x03 - TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD
0x13,0x01 - TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD
0xC0,0x2C - ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD
0xC0,0x30 - ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA
对以上的输出做一下说明:
Kx 表示
密钥交换的加密算法(需要结合wireshark以及TLS协议进行流程分析,在TLS1.2中,主要是指RSA和DH密钥交换算法, 根据rfc5246中的描述,Kx等于any时,表示匿名密钥交换算法, 一般通过Diffie-Hellman来实现密钥交换。,
Au表示身份认证算法,Enc表示通信数据的加密算法, Mac表示消息验证算法(计算消息摘要的算法)。
通过openssl 测试网站是否支持 TLS1.3 协议
openssl s_client -connect www.nike.com:443 -tls1_3
1.1.2 总结Q&A
Q: 使用./configure 配置编译环境所使用的Makefile的时候,出现以下警告,此时会提醒 需要选择和系统适配的编译器.
Notice: Configure脚本是用来生成Makefile的脚本,用于确定系统,编译器, 编译安装目录等等编译环境,便于适应多环境和平台, 类似CMake,其目的就是 用来构建工程项目框架,通过./Configure --help可以查看相关帮助信息。
报错的Log如下:
pi@raspberrypi:~/pkg_compile/openssl-1.1.1g $ ./Configure
Usage: Configure [no- …] [enable- …] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no[no-]zlib|zlib-dynamic] [no-asm] [no-egd] [sctp] [386] [–prefix=DIR] [–openssldir=OPENSSLDIR] [–with-xxx[=vvv]] [–config=FILE] os/lags]
pick os/compiler from:
BS2000-OSD BSD-generic32 BSD-generic64
NOTE: If in doubt, on Unix-ish systems use ‘./config’,
A: 解决办法,可以通过
./Configure CC=编译器绝对路径来选择编译器,
也可以直接执行 ./config 脚本, 该脚本会帮忙确定当前系统的编译环境,然后执行./Configure脚本。
pi@raspberrypi:~/pkg_compile/openssl-1.1.1g $ ./config
Operating system: armv7l-whatever-linux2
Configuring OpenSSL version 1.1.1g (0x1010107fL) for linux-armv4
Using os-specific seed configuration
Creating configdata.pm
Creating Makefile
Q:执行openssl的时候,出现openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
A: 在标准的lib库路径找不到库,需要执行

本文介绍如何使用Openssl支持TLS1.3协议,包括Openssl和Nginx的编译安装,以及如何配置Nginx服务器支持HTTPS,涵盖证书生成、加密文件和服务器配置。
最低0.47元/天 解锁文章
2404

被折叠的 条评论
为什么被折叠?



