openssl在Windows系统下的编译

文章目录

  • 前言
  • 使用步骤
    • 1.安装环境
      • 1.1安装Perl ,直接傻瓜式安装就行,环境变量自己配好了
      • 1.2安装NASM,配置环境变量
      • 1.3安装Visual studio
      • 1.4安装工具
    • 2.openssl编译
  • 总结


前言

编译openssl32位的windows 版本,刚开始各种问题踩了好多坑,终于参考了多个网友的建议完成了,所以写下安装步骤。


使用步骤

1.安装环境

1.1安装Perl ,直接傻瓜式安装就行,环境变量自己配好了

查看安装成功,在cmd中 输入:perl --version 查看安装成功与否

C:\Users\Hxl>perl --version

openssl在Windows系统下的编译_第1张图片

1.2安装NASM,配置环境变量

点击程序直接安装,然后配置环境变量
openssl在Windows系统下的编译_第2张图片

1.3安装Visual studio

openssl在Windows系统下的编译_第3张图片

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编译

  1. 解压openssl-1.0.2p.tar.gz压缩文件到本地文件夹中,
    例如D盘 D:\openssl32
  2. 用管理员的身份打开visual studio编译器 在开始→程序栏目→x86 Navite Tools Command Prompt for VS 2022,右键这个黑色命令解释器,点击更多,管理员身份打开
    我要装的是32位的openssl,选择的是X86,装64位,就选择下面那个X64的Navite Tools Command Prompt for VS 2022编辑器openssl在Windows系统下的编译_第4张图片 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.
  1. 编辑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在Windows系统下的编译_第5张图片
注:从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
  1. 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文件,明明自己已经指定了地址的,然后编译的结果都在这个文件夹里(大家要是知道原因,还请指导)

  1. 打开uer文件,目录如下
  • bin 可执行文件,以及openssl库的动态链接文件
  • include 编程时要用的头文件
  • lib 静态链接文件
  • ssl ssl的配置文件

总结

编译完成

你可能感兴趣的:(windows,perl,开发语言,c++)