文章目录
前言
编译openssl32位的windows 版本,刚开始各种问题踩了好多坑,终于参考了多个网友的建议完成了,所以写下安装步骤。
使用步骤
1.安装环境
1.1安装Perl ,直接傻瓜式安装就行,环境变量自己配好了
查看安装成功,在cmd中 输入:perl --version 查看安装成功与否
C:\Users\Hxl>perl --version
1.2安装NASM,配置环境变量
点击程序直接安装,然后配置环境变量
1.3安装Visual studio
1.4安装工具
- Visual studio
链接:https://pan.baidu.com/s/1xYXJ4MDYr0gEUmzxwAaFPw
提取码:0000
- perl
链接:https://pan.baidu.com/s/1cYgePxzK6gzecQf2-yF1MA
提取码:0000
- openssl (1开头的版本)
链接:https://pan.baidu.com/s/1-da2_vDqhT2GP5hH1Iu0tQ
提取码:0000
- nasm
链接:https://pan.baidu.com/s/1FJaeeMgY4rM6NUkVYC5Cwg
提取码:0000
2.openssl编译
- 解压openssl-1.0.2p.tar.gz压缩文件到本地文件夹中,
例如D盘 D:\openssl32 - 用管理员的身份打开visual studio编译器 在开始→程序栏目→x86 Navite Tools Command Prompt for VS 2022,右键这个黑色命令解释器,点击更多,管理员身份打开
我要装的是32位的openssl,选择的是X86,装64位,就选择下面那个X64的Navite Tools Command Prompt for VS 2022编辑器3. 然后在编辑器中进入解压过openssl-1.0.2p.tar.gz盘中,
**********************************************************************
** Visual Studio 2022 Developer Command Prompt v17.2.4
** Copyright (c) 2022 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x86'
C:\Windows\System32>D:
D:\>cd D:\openssl32\openssl-1.0.2p
D:\openssl32\openssl-1.0.2p>perl configure VC-WIN32
得到如下结果
D:\openssl32\openssl-1.0.2p>perl configure VC-WIN32
Configuring for VC-WIN32
no-ec_nistp_64_gcc_128 [default] OPENSSL_NO_EC_NISTP_64_GCC_128 (skip dir)
no-gmp [default] OPENSSL_NO_GMP (skip dir)
no-jpake [experimental] OPENSSL_NO_JPAKE (skip dir)
no-krb5 [krb5-flavor not specified] OPENSSL_NO_KRB5
no-libunbound [experimental] OPENSSL_NO_LIBUNBOUND (skip dir)
no-md2 [default] OPENSSL_NO_MD2 (skip dir)
no-rc5 [default] OPENSSL_NO_RC5 (skip dir)
no-rfc3779 [default] OPENSSL_NO_RFC3779 (skip dir)
no-sctp [default] OPENSSL_NO_SCTP (skip dir)
no-shared [default]
no-ssl-trace [default] OPENSSL_NO_SSL_TRACE (skip dir)
no-ssl2 [default] OPENSSL_NO_SSL2 (skip dir)
no-store [experimental] OPENSSL_NO_STORE (skip dir)
no-unit-test [default] OPENSSL_NO_UNIT_TEST (skip dir)
no-weak-ssl-ciphers [default] OPENSSL_NO_WEAK_SSL_CIPHERS (skip dir)
no-zlib [default]
no-zlib-dynamic [default]
IsMK1MF=1
CC =cl
CFLAG =-DOPENSSL_THREADS -DDSO_WIN32 -W3 -WX -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE -D_WINSOCK_DEPRECATED_NO_WARNINGS -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
EX_LIBS =
CPUID_OBJ =x86cpuid.o
BN_ASM =bn-586.o co-586.o x86-mont.o x86-gf2m.o
EC_ASM =
DES_ENC =des-586.o crypt586.o
AES_ENC =aes-586.o vpaes-x86.o aesni-x86.o
BF_ENC =bf-586.o
CAST_ENC =cast-586.o
RC4_ENC =rc4-586.o
RC5_ENC =rc5-586.o
MD5_OBJ_ASM =md5-586.o
SHA1_OBJ_ASM =sha1-586.o sha256-586.o sha512-586.o
RMD160_OBJ_ASM=rmd-586.o
CMLL_ENC =cmll-x86.o
MODES_OBJ =ghash-x86.o
ENGINES_OBJ =
PROCESSOR =
RANLIB =true
ARFLAGS =
PERL =perl
THIRTY_TWO_BIT mode
BN_LLONG mode
RC4_INDEX mode
RC4_CHUNK is undefined
Configured for VC-WIN32.
- 编辑ms/do_nasm.bat,在ms文件夹下生成nt.make和ntdll.make文件
ms/do_nasm.bat
这时在相应的文件夹中有一个mekefile文件,写入:nmake -f ms\nt.mak(静态库)开始编译
D:\openssl32\openssl-1.0.2p>nmake -f ms\nt.mak
得到控制台结果
Microsoft (R) 程序维护实用工具 14.32.31329.0 版
版权所有 (C) Microsoft Corporation。 保留所有权利。
Building OpenSSL
perl util/mkdir-p.pl "tmp32.dbg"
created directory `tmp32.dbg'
perl util/mkdir-p.pl "out32.dbg"
created directory `out32.dbg'
perl util/mkdir-p.pl "inc32"
created directory `inc32'
perl util/mkdir-p.pl "inc32\openssl"
created directory `inc32/openssl'
perl .\util\copy-if-different.pl ".\.\e_os.h" "tmp32.dbg\e_os.h"
Copying: ././e_os.h to tmp32.dbg/e_os.h
perl .\util\copy-if-different.pl ".\crypto\cryptlib.h" "tmp32.dbg\cryptlib.h"
Copying: ./crypto/cryptlib.h to tmp32.dbg/cryptlib.h
perl .\util\copy-if-different.pl ".\crypto\buildinf.h" "tmp32.dbg\buildinf.h"
Copying: ./crypto/buildinf.h to tmp32.dbg/buildinf.h
perl .\util\copy-if-different.pl ".\crypto\md32_common.h" "tmp32.dbg\md32_common.h"
Copying: ./crypto/md32_common.h to tmp32.dbg/md32_common.h
perl .\util\copy-if-different.pl ".\crypto\o_time.h" "tmp32.dbg\o_time.h"
Copying: ./crypto/o_time.h to tmp32.dbg/o_time.h
perl .\util\copy-if-different.pl ".\crypto\o_str.h" "tmp32.dbg\o_str.h"
Copying: ./crypto/o_str.h to tmp32.dbg/o_str.h
perl .\util\copy-if-different.pl ".\crypto\o_dir.h" "tmp32.dbg\o_dir.h"
复制了一部分到上面,太多了,编译一段时间,然后在out32dll文件夹中可以看到lib、exe、pbd文件
注:从openssl 1.1.0版本以后就不再有ms\do_*.bat这样的文件,而是直接使用nmake命令就行了,详见官方文档
5. nmake -f ms\nt.mak test
nmake -f ms\ntdll.mak test
测试控制栏最后几行的结果
client authentication
server authentication
depth=1 /C=AU/O=Dodgy Brothers/CN=Dodgy CA
depth=0 /C=AU/O=Dodgy Brothers/CN=Brother 1/CN=Brother 2
depth=1 /C=AU/O=Dodgy Brothers/CN=Dodgy CA
depth=0 /C=AU/O=Dodgy Brothers/CN=Brother 1/CN=Brother 2
TLSv1.2, cipher TLSv1/SSLv3 ECDHE-RSA-AES256-GCM-SHA384, 2048 bit RSA
1 handshakes of 256 bytes done
passed all tests
- nmake -f ms\nt.mak install
Microsoft (R) 程序维护实用工具 14.32.31329.0 版
版权所有 (C) Microsoft Corporation。 保留所有权利。
Building OpenSSL
perl util/mkdir-p.pl "\usr\local\ssl"
created directory `/usr'
created directory `/usr/local'
created directory `/usr/local/ssl'
perl util/mkdir-p.pl "\usr\local\ssl\bin"
created directory `/usr/local/ssl/bin'
perl util/mkdir-p.pl "\usr\local\ssl\include"
created directory `/usr/local/ssl/include'
perl util/mkdir-p.pl "\usr\local\ssl\include\openssl"
created directory `/usr/local/ssl/include/openssl'
这里不太理解为什么自动在D盘建了一个usr文件,明明自己已经指定了地址的,然后编译的结果都在这个文件夹里(大家要是知道原因,还请指导)
- 打开uer文件,目录如下
- bin 可执行文件,以及openssl库的动态链接文件
- include 编程时要用的头文件
- lib 静态链接文件
- ssl ssl的配置文件
总结
编译完成