在Windows 10系统上编译OpenSSL3.4.0
现在是2024年12月30日,星期一.
下载openssl源码
这里我下载的是现在的时间的最新版的openssl,版本是3.4.0.
https://github.com/openssl/openssl/archive/refs/tags/openssl-3.4.0.zip
安装vs
vs全称:Visual Studio,注意不是vscode,vscode全称是:Visual Studio Code.
我的vs版本是Visual Studio 2013.
安装vs,任何一个版本的vs,我这里安装的vs2013.
为什么要安装vs,如果没有安装vs,就没有nmake,nmake是用来编译的.
安装windows sdk
一般情况下,你安装vs时就可以选择下载安装windows sdk,如果没有安装windows sdk,下载并安装
windows sdk下载页面链接如下:
https://developer.microsoft.com/zh-cn/windows/downloads/windows-sdk/
如果你下载安装程序,记得把里面的所有sdk全选安装,
如果你知道需要下载哪些sdk,你就自己选择性安装即可.
如论你下载[安装程序]还是下载[iso],其实都是一样的界面,一样的安装流程,
区别在于
[安装程序]是在线安装,
[iso]是把东西全部下载了,离线安装,文件都在iso镜像文件内.额外说明一下,其实iso文件也是压缩文件的一种,也是压缩包.
安装perl
perl下载页面链接:
选择红框里的msi下载并且安装
执行
遇到Locale 'Chinese (Simplified)_China.936' is unsupported, and may crash the interpreter.
提示,可以不用理会,
但如果你想解决这个提示,把命令换语言环境设置成英文,执行:
set LOCALE=en_US
在openssl文件夹里进入cmd执行
perl Configure VC-WIN32
如果你想要指定编译出来的文件全部放到统一的一个文件夹里,可以使用--prefix=C:/MyOutputDirectory来指定,例如;
perl Configure VC-WIN32 --prefix=C:/openssl_build
如果没有指定安装目录,nmake install会把编译好的二进制文件全部复制到系统目录
然后继续cmd执行
"C:\app\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat"
使用evething搜索你电脑上vcvars32.bat文件,复制文件路径,
例如我的电脑上这个文件所在位置:
C:\app\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat
然后进入cmd
执行(记得路径有空格的话,要把路径使用双引号括起来):
"C:\app\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat"
这个bat文件会把自动配置环境变量.
cmd执行完vcvars32.bat,cd到openssl文件夹,执行:
nmake
这个编译过程时间可能会有点长,大约20分钟到30分钟.
编译完成之后,执行:
nmake install
nmake install这个命令是把编译好的二进制文件自动复制到你的系统目录里面,
因为我执行perl时没有指定安装目录,nmake install把编译好的二进制文件复制到了c盘的这样一个文件夹里:
C:/Program Files (x86)/OpenSSL
openssl的简单使用
现在,你在cmd里面,就可以使用openssl了,执行:
openssl
你会进入openssl的环境里
R:\openssl-3.4.0>openssl OpenSSL>
退出openssl环境,输入exit:
R:\openssl-3.4.0>openssl OpenSSL> exit
R:\openssl-3.4.0>
如果你想要查看openssl都有哪些指令,执行:
openssl help
该命令会提示出openssl所有的标准指令,例如我的执行结果:
R:\openssl-3.4.0>openssl help Standard commands asn1parse ca ciphers cms crl crl2pkcs7 dgst dhparam dsa dsaparam ec ecparam enc engine errstr gendsa genpkey genrsa help list nseq ocsp passwd pkcs12 pkcs7 pkcs8 pkey pkeyparam pkeyutl prime rand rehash req rsa rsautl s_client s_server s_time sess_id smime speed spkac srp storeutl ts verify version x509
Message Digest commands (see the `dgst' command for more details) blake2b512 blake2s256 gost md4 md5 mdc2 rmd160 sha1 sha224 sha256 sha3-224 sha3-256 sha3-384 sha3-512 sha384 sha512 sha512-224 sha512-256 shake128 shake256 sm3
Cipher commands (see the `enc' command for more details) aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc aes-256-ecb aria-128-cbc aria-128-cfb aria-128-cfb1 aria-128-cfb8 aria-128-ctr aria-128-ecb aria-128-ofb aria-192-cbc aria-192-cfb aria-192-cfb1 aria-192-cfb8 aria-192-ctr aria-192-ecb aria-192-ofb aria-256-cbc aria-256-cfb aria-256-cfb1 aria-256-cfb8 aria-256-ctr aria-256-ecb aria-256-ofb base64 bf bf-cbc bf-cfb bf-ecb bf-ofb camellia-128-cbc camellia-128-ecb camellia-192-cbc camellia-192-ecb camellia-256-cbc camellia-256-ecb cast cast-cbc cast5-cbc cast5-cfb cast5-ecb cast5-ofb des des-cbc des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb des-ofb des3 desx idea idea-cbc idea-cfb idea-ecb idea-ofb rc2 rc2-40-cbc rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb rc4 rc4-40 rc5 rc5-cbc rc5-cfb rc5-ecb rc5-ofb seed seed-cbc seed-cfb seed-ecb seed-ofb sm4-cbc sm4-cfb sm4-ctr sm4-ecb sm4-ofb zlib
假如我现在想要计算一个文件的md5值,执行:
openssl md5 "C:\Users\rkey\Desktop\桌面备份-2021.11.27\nmake和nmake install.md"
返回结果:
MD5(C:\Users\rkey\Desktop\桌面备份-2021.11.27\nmake和nmake install.md)= fcf45ab6dc84626c544e355c8f16808d
其他
perl Configure VC-WIN32 --prefix=C:/openssl_build
这个命令做了哪些事情?
在 OpenSSL 的上下文中,perl Configure VC-WIN32
命令是在 Windows 系统上编译 OpenSSL 库的第一步。这个命令执行以下操作:
-
配置构建环境:
-
Configure
脚本是 OpenSSL 源代码中的一个 Perl 脚本,它用于检测系统环境并生成适用于特定平台的构建配置。
-
-
选择构建选项:
-
VC-WIN32
是一个参数,指定了使用 Microsoft Visual C++ 编译器进行 32 位编译。这意味着编译出的 OpenSSL 库将适用于 32 位 Windows 系统。
-
-
生成 Makefile:
-
执行
Configure
脚本会根据选择的选项(在这个例子中是VC-WIN32
)生成一个Makefile
。这个Makefile
包含了编译 OpenSSL 所需的所有指令和设置。
-
-
设置编译参数:
-
Configure
脚本会根据输入的参数设置编译器标志、定义宏、包含目录和其他编译参数,以便生成适用于特定平台的 OpenSSL 版本。
-
-
指定安装目录:
-
--prefix
参数用于指定安装目录的前缀。在这里,C:/openssl_build
是你希望 OpenSSL 被安装到的目标目录。这意味着编译后的 OpenSSL 库、可执行文件、头文件等将被放置在这个目录下。-
库文件(如
.lib
或.dll
)将被放置在C:/openssl_build/lib
。 -
可执行文件(如
openssl.exe
)将被放置在C:/openssl_build/bin
。 -
头文件(如
.h
)将被放置在C:/openssl_build/include
。
-
-
编译其他架构的openssl
根据openssl项目的描述,你可以编译其他系统架构的openssl二进制可执行程序,你在openssl的源码里也能找到这一部分的说明:
https://github.com/openssl/openssl/blob/master/NOTES-WINDOWS.md
(如果你下载了源码,你也可以用evething搜索NOTES-WINDOWS.md,查看关于这一部分的描述)
注意,如果你选择编译其他架构的openssl,那么你在配置项构建时也要进行相关指定,例如我要编译64位的openssl,那么相关指令就要改变:
perl Configure VC-WIN64A
C:\app\Microsoft Visual Studio 12.0\VC\bin\amd64\vcvars64.bat
(只有这两点需要改变,其他部分不变,请注意执行流程的顺序)
以下是相关内容翻译:
-
使用具有管理权限的 Visual Studio 开发人员命令提示符,根据预期的体系结构选择其变体之一。或者使用选项之一运行
cmd
并执行、 、、、、或。这将设置、等所需的环境变量。另请参阅 https://docs.microsoft.com/cpp/build/building-on-the-command-linevcvarsall.bat``x86``x86_amd64``x86_arm``x86_arm64``amd64``amd64_x86``amd64_arm``amd64_arm64``nmake.exe``cl.exe
-
从 OpenSSL 源目录的根目录输入
-
perl Configure VC-WIN32
如果你想要 32 位 OpenSSL 或者 -
perl Configure VC-WIN64A
如果你想要 64 位 OpenSSL 或者 -
perl Configure VC-WIN64-ARM
如果你想要 Arm 上的 Windows (win-arm64) OpenSSL 或者 -
perl Configure VC-WIN64-CLANGASM-ARM
如果你想要使用 clang-cl 作为汇编程序支持 Arm 上的 Windows(win-arm64)OpenSSL,或者 -
perl Configure VC-CLANG-WIN64-CLANGASM-ARM
如果你想要在 Arm (win-arm64) 上使用 Windows OpenSSL,使用 clang-cl 作为编译器和汇编器,或者 -
perl Configure VC-WIN32-HYBRIDCRT
如果你想要依赖于 Universal CRT 的 32 位 OpenSSL 或者 -
perl Configure VC-WIN64A-HYBRIDCRT
如果你想要依赖于 Universal CRT 的 64 位 OpenSSL 或者 -
perl Configure
让 Configure 识别平台
-