SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。

SSL能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。

在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。

Eric A. Young和Tim J. Hudson自1995年开始编写后来具有巨大影响的openssl软件包,这是一个没有太多限制的开放源代码的软件包。Eric A. Young 和Tim J. Hudson是加拿大人,后来由于写OpenSSL功成名就之后就到大公司里赚大钱去了。1998年,OpenSSL项目组接管了OpenSSL的开发工作,并推出了OpenSSL的0.9.1版,OpenSSL的算法已经非常完善,对SSL2.0、SSL3.0以及TLS1.0都支持。

OpenSSL采用C语言作为开发语言,这使得OpenSSL具有优秀的跨平台性能,这对于广大技术人员来说是一件非常美妙的事情,可以在不同的平台使用同样熟悉的东西。OpenSSL支持Linux、Windows、BSD、Mac、VMS等平台,这使得OpenSSL具有广泛的适用性。但习惯C语言总比使用C 重新写一个跟OpenSSL相同功能的软件包轻松不少。

OpenSSL整个软件包大概可以分成三个主要的功能部分:SSL协议库、应用程序以及密码算法库。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。

作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。

  1. 下载OpenSSL源码

下载网址为:https://www.openssl.org/source/,最新的版本是openssl-3.0.2,2022年3月15日发布。

2.安装编译工具

编译OpenSSL需要安装一系列的编译工具,罗列如下:

a) 安装C 编译器

这里安装的是 Visual Studio 2017,安装过程不做赘述。

b) 安装ActivePerl

下载网址是:http://www.activestate.com/activeperl/downloads,当前最新版本是5.34,将ActivePerl添加到系统的Path环境变量中,其值为:C:\Perl64\bin。

c) 安装NASM

下载网址是:https://www.nasm.us/,当前最新版本是2.15.05。将NASM添加到系统的Path环境变量中,其值为:C:\Users\klogin\AppData\Local\bin\NASM。

3.设置Visual Studio 2017的环境变量

一种方法是利用vcvarsall.bat命令来设置,另外一种方法是手工设置。

第一种方法实验失败,这里采用第二种方法,手工设置环境变量。

需要手工设置Windows 10的INCLUDE和LIB这两个环境变量,其中前者用来寻找头文件,后者用来寻找LIB文件。

INCLUDE环境变量设置的值如下图所示:

openssl编译静态库(Windows平台OpenSSL编译)(1)

INCLUDE环境变量设置

LIB环境变量设置的值如下图所示:

openssl编译静态库(Windows平台OpenSSL编译)(2)

LIB环境变量设置

Path环境变量添加下列值,编译时候要用到。

C:\Program Files (x86)\Windows Kits\10\bin\10.0.17134.0\x64

4.开始编译

a) 从控制台界面切换到OpenSSL源码根目录,执行命令:

perl Configure VC-WIN64A,执行OpenSSL的配置文件,得到OpenSSL的Makefile文件。

这里安装的是64位版本。

openssl编译静态库(Windows平台OpenSSL编译)(3)

OpenSSL配置界面

如果只想编译出静态库libcrypto.lib,libssl.lib,则加入命令参数no-shared,如:

perl Configure VC-WIN64A no-shared。

b) 控制台执行命令,nmake,编译OpenSSL库

执行过程如下所示:

openssl编译静态库(Windows平台OpenSSL编译)(4)

OpenSSL的编译过程

编译完成之后,得到x64版本的libcrypto.dll,libssl.dll,libcrypto.lib,libssl.lib。

c) 控制台执行命令,nmake test,测试OpenSSL库

d) 控制台执行命令,nmake install, 将OpenSSL库安装在C:\Program Files\OpenSSL目录,并删除编译过程中产生的中间文件。

,