1、OpenSSL简介

OpenSSL 是一个开源的第三方库,它实现了 SSLSecure SocketLayer)和 TLSTransport Layer Security)协议,被广泛企业应用所采用。对于一般的开发人员而言,在 Win32 OpenSSL 上下载已经编译好的 OpenSSL 库是省力省事的好办法。对于高级的开发用户,可能需要适当的修改或者裁剪 OpenSSL,那么编译它就成为了一个关键问题。

OpenSSL是一个功能丰富且开源的安全工具箱,它提供的主要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、OCSP协议、数字证书验证、PKCS7标准实现和PKCS12个人数字证书格式实现等功能。

OpenSSL采用C语言作为开发语言,这使得它具有优秀的跨平台性能,OpenSSL支持:Linux、UNIX、Android、Windows、Mac等平台。

OpenSSL 是一个强大的、广泛使用的开源库,用于实现加密、SSL/TLS 协议以及相关的安全功能。它支持多种加密算法、密钥生成、数字证书验证等,并且是互联网上安全通信的基石。下面是关于 OpenSSL 的详细介绍:

1.什么是 OpenSSL

OpenSSL 是一个用于提供加密通信的开源软件库,主要用于实现**安全套接字层(SSL)和传输层安全(TLS)**协议。它还提供了各种加密算法、哈希函数和加密协议的实现,广泛应用于服务器端和客户端的软件中,以确保网络通信的安全性。

官网:OpenSSL.org 。
编程语言:主要使用 C 编写
许可:Apache License 2.0 。

2. OpenSSL 的核心功能

1. 加密算法

OpenSSL 支持对称加密和非对称加密,以及哈希函数。

  • 对称加密算法:加密和解密使用同一个密钥,适用于大规模数据加密。常见算法包括:

    • AES(高级加密标准)。
    • DES(数据加密标准)和 3DES(三重 DES)。
    • ChaCha20。
    • Blowfish。
  • 非对称加密算法:加密和解密使用不同的密钥(公钥和私钥)。常见算法包括:

    • RSA(Rivest-Shamir-Adleman)。
    • DSA(数字签名算法)。
    • ECC(椭圆曲线加密)。
  • 哈希函数:用于生成固定长度的摘要,用于数据完整性验证。常见算法包括:

    • SHA-256、SHA-512(安全哈希算法)。
    • MD5(不再安全)。
    • RIPEMD。
2. SSL/TLS 协议

OpenSSL 实现了 SSL(Secure Sockets Layer)和 TLS(Transport Layer Security)协议,用于保护网络通信安全。主要功能包括:

  • 加密传输的数据以防止窃听。
  • 确保数据完整性。
  • 验证服务器和客户端的身份。
3. 数字证书管理

OpenSSL 还提供了强大的数字证书管理工具,可以创建、验证和管理 X.509 数字证书。这些证书用于验证身份,并在 HTTPS 协议中得到广泛使用。OpenSSL 可以执行以下证书管理任务:

  • 生成公钥和私钥对。
  • 创建自签名证书。
  • 颁发和验证证书(支持自定义证书颁发机构(CA))。
  • 证书转换、导出和查看。

3.OpenSSL 常用命令行工具

OpenSSL 提供了一个强大的命令行工具,可以完成各种加密、签名、证书生成等任务。下面是一些常见的命令和用法:

1. 生成密钥
  • 生成 RSA 密钥对:
openssl genrsa -out private_key.pem 2048
  • 生成 ECC 密钥对:
openssl ecparam -name prime256v1 -genkey -noout -out ecc_private_key.pem
2. 生成证书请求和自签名证书
  • 生成 CSR(证书签名请求):
openssl req -new -key private_key.pem -out csr.pem
  • 生成自签名证书:
openssl req -x509 -key private_key.pem -days 365 -out certificate.pem
3. 证书查看和验证
  • 查看证书内容:
openssl x509 -in certificate.pem -text -noout
openssl verify -CAfile ca_cert.pem server_cert.pem
4. 加密和解密
  • 使用 AES 进行加密:
openssl enc -aes-256-cbc -salt -in file.txt -out file.enc
  • 使用 AES 进行解密:
openssl enc -aes-256-cbc -d -in file.enc -out file_dec.txt
5. 文件哈希
  • 生成文件的 SHA256 哈希值:
openssl dgst -sha256 file.txt

4. OpenSSL 的内部架构

OpenSSL 的架构由多个模块构成,每个模块负责不同的功能:

  • libcrypto:提供基本的加密算法、随机数生成、哈希函数、数字签名等功能。
  • libssl:实现了 SSL/TLS 协议,处理加密通信、证书管理、密钥交换等任务。
  • openssl 命令行工具:一个命令行程序,允许用户与 OpenSSL 的库进行交互,执行各种加密和证书管理任务。

5. OpenSSL 的应用场景

OpenSSL 在以下领域有广泛应用:

  • HTTPS 加密:OpenSSL 支持 SSL/TLS 协议,是很多 Web 服务器(如 Apache、Nginx)使用的默认加密库,用于提供 HTTPS 加密。
  • VPN 和安全通信:OpenSSL 被用于虚拟专用网(VPN)和其他加密通信应用(如 OpenVPN)。
  • 邮件加密:OpenSSL 可以实现邮件传输的加密(如 SMTP 的 STARTTLS)。
  • 文件加密和签名:OpenSSL 提供的加密算法可以用于对文件进行加密、解密和数字签名。

6. OpenSSL 的优点和缺点

  • 优点:
    • 开源、免费:广泛使用于商业和非商业项目中。
    • 丰富的功能:支持多种加密算法、哈希函数、协议和证书管理工具。
    • 高效性:性能良好,并且经过多年的优化和开发,稳定性较高。
    • 广泛支持:可以运行在多种平台上,包括 Windows、Linux、macOS 等。
  • 缺点:
    • 复杂的配置:OpenSSL 功能非常强大,但这也带来了配置复杂的问题,特别是对于新手来说。
    • 历史上存在漏洞:OpenSSL 曾经暴露出一些安全漏洞(如 Heartbleed),因此需要定期更新并及时修补漏洞。
    • 文档较难理解:虽然 OpenSSL 拥有丰富的功能,但其文档有时较难理解,使用时需要深入了解内部结构。

7.OpenSSL 版本和更新

OpenSSL 定期发布新版本,修复漏洞、增强功能和性能。通常建议使用最新的稳定版本以确保安全。你可以从 OpenSSL 的官方网站获取最新版本的源码和二进制安装包。

最新的长期支持(LTS)版本为 OpenSSL 1.1.1。
OpenSSL 3.0 引入了大量的新特性和改进,但需要注意向后兼容性的问题。

8.OpenSSL 的替代品

虽然 OpenSSL 是最广泛使用的加密库之一,但也有一些替代方案,提供类似的功能:

  • LibreSSL:OpenSSL 的一个分支,旨在改进安全性和代码可维护性。
  • BoringSSL:Google 从 OpenSSL 分支出来的版本,主要用于 Chrome 和 Android 的加密通信。
  • WolfSSL:轻量级、嵌入式的 SSL/TLS 库,专注于小型嵌入式系统。
  • 总结:
    • OpenSSL 是一个功能强大且灵活的加密工具和库,它为开发者提供了丰富的加密算法、哈希算法、SSL/TLS 协议实现和数字证书管理功能。在网络安全、数据加密和安全通信中,OpenSSL 扮演着至关重要的角色。尽管配置复杂,使用它可以有效保障网络和数据的安全。

如果你正在开发涉及加密、SSL/TLS 协议的应用程序,OpenSSL 可能是最值得信赖和广泛使用的解决方案之一。

下面,主要讲述如何在 Windows 上编译 OpenSSL 库。

2、下载与安装Perl

a.(编译工具)我没有去官网下载,要注册啥的很麻烦,小网站下载了一个能用的。

点击下面链接直接下载

下载地址:https://djvniu.jb51.net/200906/tools/ActivePerl5_64.rar

下载Perl安装包,然后双击“ActivePerl-5.24.1.2402-MSWin32-x64-401627.exe”:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、测试ActivePerl是否安装正确

先配置好环境变量,使用cmd命令行工具:
在这里插入图片描述

C:\Users\Administrator>perl --version

在这里插入图片描述

C:\Perl64\eg>perl example.pl

若显示“Hello from ActivePerl!”,则说明Perl安装成功。
在这里插入图片描述

4、下载与安装Nasm

下载并安装 Nasm 汇编器,并将 E:\NASM 添加到系统环境变量 Path 中。
在这里插入图片描述
下载地址:http://www.nasm.us/
我下载的是:nasm-2.13.01-installer-x64.exe

先配置好环境变量,使用cmd命令行工具:
在这里插入图片描述
即安装成功。

5、下载与安装 OpenSSL

下载地址:http://www.openssl.org/

github地址
在这里插入图片描述

我下载的是:openssl-1.0.2m.tar.gz

完成上述所有步骤,将 OpenSSL 包解压至 E:\360安全浏览器下载\maoxiandao\openssl-1.0.2m (1)\openssl-1.0.2m,便可以进行编译了。

注意: 解压后的目录中有两个文件 - INSTALL.W32INSTALL.W64,包含了 OpenSSL 的各个编译步骤。
在这里插入图片描述

1、编译步骤

  • 打开命令提示符,定位至 E:\360安全浏览器下载\maoxiandao\openssl-1.0.2m (1)\openssl-1.0.2m:在这里插入图片描述

  • 输入 perl Configure VC-WIN32 --prefix=E:\OpenSSL(将其安装到 E:\OpenSSL):
    在这里插入图片描述

  • 输入 ms\do_nasm
    在这里插入图片描述

  • 将命令提示符定位至 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin, 然后输入vcvars32.bat
    在这里插入图片描述
    在这里插入图片描述
    如果没有这一步,会提示 nmake 不是内部或外部命令等一系列错误。

  • 再次将命令提示符定位至 E:\360安全浏览器下载\maoxiandao\openssl-1.0.2m (1)\openssl-1.0.2m,然后输入 nmake -f ms\ntdll.mak:
    在这里插入图片描述
    完成之后,会在 openssl-1.0.2m 目录下生成一个名为 out32dll 的文件夹,里面包含了一些动态库和 exe 文件:
    在这里插入图片描述
    在这里插入图片描述

  • 当如果出现rc.exe找不到的时候,尝试下用其他vs版本进行编译:

cl /Fotmp32dll\srp_vfy.obj  -Iinc32 -Itmp32dll /MD /Ox /O2 /Ob2 -DOPENSSL_THREADS  -DDSO_WIN32 -W3 -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DOPENSSL_USE_APPLINK -I. -DOPENSSL_NO_RC5 -DOPENSSL_NO_MD2 -DOPENSSL_NO_SSL2 -DOPENSSL_NO_KRB5 -DOPENSSL_NO_JPAKE -DOPENSSL_NO_WEAK_SSL_CIPHERS -DOPENSSL_NO_STATIC_ENGINE /Zi /Fdtmp32dll/lib -D_WINDLL  -DOPENSSL_BUILD_SHLIBCRYPTO -c .\crypto\srp\srp_vfy.c
srp_vfy.c
        rc /fo"tmp32dll\libeay32.res" /d CRYPTO ms\version32.rc
'rc' is not recognized as an internal or external command,
operable program or batch file.
NMAKE : fatal error U1077: “rc”: 返回代码“0x1”
Stop.
  • 最终在尝试用原来版本编译。

  • 输入 nmake -f ms\ntdll.mak test,若最终显示 passed all tests 则说明生成的库正确:
    在这里插入图片描述

  • 输入 nmake -f ms\ntdll.mak install
    在这里插入图片描述

  • 完成之后,会在 E:\OpenSSL 目录下生成 bin、include、lib、ssl 四个文件夹:
    在这里插入图片描述

  • 注意:

    • 以上编译的是 release 版本,若要编译 debug 版,将上述第 2 步中的 VC-WIN32 改成 debug-VC-WIN32即可。
    • 若要编译静态库,则用 ms\nt.mak 替换掉上面用到的 ms\ntdll.mak 即可。
    • 若要生成不带汇编支持的库,则需将上述第 2、3 步用 perl Configure VC-WIN32 no-asm --prefix=E:\OpenSSL 和 ms\do_ms 替换。
    • 在 E:\360安全浏览器下载\maoxiandao\openssl-1.0.2m (1)\openssl-1.0.2m 文件夹下包含相应的汇编文件。
  • 备注:可能使用的命令:

      测试OpenSSL动态库:nmake -f ms\ntdll.mak test
    
      测试OpenSSL静态库:nmake -f ms\nt.mak test
    
      安装OpenSSL动态库:nmake -f ms\ntdll.mak install
    
      安装OpenSSL静态库:nmake -f ms\nt.mak install
    
      清除上次OpenSSL动态库的编译,以便重新编译:nmake -f ms\ntdll.mak clean
    
      清除上次OpenSSL静态库的编译,以便重新编译:nmake -f ms\nt.mak clean
    
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐