Windows 下详细步骤编译 OpenSSL
Windows 下详细步骤编译 OpenSSL
文章目录
1、OpenSSL简介
OpenSSL 是一个开源的第三方库,它实现了 SSL(Secure SocketLayer)和 TLS(Transport 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/。
我下载的是:openssl-1.0.2m.tar.gz。
完成上述所有步骤,将 OpenSSL 包解压至 E:\360安全浏览器下载\maoxiandao\openssl-1.0.2m (1)\openssl-1.0.2m,便可以进行编译了。
注意: 解压后的目录中有两个文件 - INSTALL.W32、INSTALL.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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)