最近对基于Thrift和OpenSSL的安全通信比较感兴趣,根据自己的研究情况,我将其中的研究过程总结下来,作为备忘。
首先,我们明确一下为达成上述目标,需要做哪些工作?
- 01#编译OpenSSL库;
- 02#编译Boost库;
- 03#编译zlib库;
- 04#编译Libevent库;
- 05#编译Thrift库;
- 06#生成客户端和服务端通信所用的数字证书;
- 07#编写基于Linux系统的测试代码(单向验证:客户端验证服务端);
- 08#编写基于Windows系统的测试代码(单向验证:客户端验证服务端);
- 09#编写基于Linux系统的测试代码(双向验证:客户端验证服务端+服务端验证客户端);
- 10#编写基于Windows系统的测试代码(双向验证:客户端验证服务端+服务端验证客户端);
- 11#自定义数字证书的验证策略;
明确了安全通信所需要的执行步骤,我们从OpenSSL的编译开始本系列之旅。
下载OpenSSL
OpenSSL的官方网站列表:
官网网站:https://openssl-library.org
最新版本:https://openssl-library.org/source
历史版本:https://openssl-library.org/source/old/index.html
打开最新版本的网址后,如下图所示:

上述网页列出了OpenSSL的最新版本,我们根据自身或者公司的要求下载对应的版本,本文使用V1.1.1W版本进行演示。
也可以使用如下快速连接进行下载:
本系列演示用的版本V1.1.1W的下载地址如下:
https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1w/openssl-1.1.1w.tar.gz
另外一个常用的版本V1.1.0l的下载地址如下:
https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_0l/openssl-1.1.0l.tar.gz
Windows版本编译方法
1/4) 安装依赖软件Strawberry Perl
我们可以从官网下载最新的版本:
https://strawberryperl.com
或者从历史页面下载特定的版本:
https://strawberryperl.com/releases.html
或者直接下载本系列所用的V5.38.2.2-64bit版本:
https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_53822_64bit/strawberry-perl-5.38.2.2-64bit.msi
下载完毕之后,直接双击运行,使用默认选项进行安装即可,如下界面展示了Strawberry Perl的默认安装路径:

安装完毕之后,打开命令行窗口,输入where perl,如果能看到如下图所示的结果,则说明Strawberry Perl安装成功:

2/4) 安装依赖软件NASM
我们可以从官网下载最新的版本:
https://www.nasm.us
或者从历史页面下载特定的版本:
https://www.nasm.us/pub/nasm/releasebuilds
或者直接下载本系列所用的V2.16.03版本:
https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/win64/nasm-2.16.03-installer-x64.exe
下载完毕之后,直接双击运行,使用默认选项进行安装即可,如下界面展示了NASM的默认安装路径:

安装完毕之后,将NASM的安装路径放入系统环境变量中,如下图所示:

设置系统环境变量之后,打开命令行窗口,输入where nasm,如果能看到如下图所示的结果,则说明NASM安装成功:

3/4) 下载OpenSSL代码并解压
OpenSSL下载完毕并解压后,如下图所示:

4/4) 编译静态库并安装
1 | perl configure VC-WIN64A no-shared --release --prefix=D:\openssl-1.1.1w --openssldir=D:\openssl-1.1.1w |
注意:在Windows上编译OpenSSL,需要使用Visual Studio自带的“适用于 VS 2017 的 x64 本机工具命令提示”进行编译,打开方法如下图所示:

OpenSSL配置完成后,如下图所示:

OpenSSL安装完成后,如下图所示:

至此,OpenSSL的Release版本的静态库已编译完成。如果我们需要Debug版本或者动态库,可以参考如下命令:
1 | # 编译:静态库+Release |