Win10 下编译OpenSSL-1.0.2l | OpenSSL-1.1.1i

标签: none

OpenSSL是一个开源的第三方库,它实现了SSL(Secure SocketLayer)和TLS(Transport Layer Security)协议,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

lib:包含了所有的库文件(例如:libeay32.lib、ssleay32.lib)。
include:包含了所有的头文件(例如:aes.h、md5.h)。
bin:包含了测试程序、存储证书和密钥的文件(*.pem)。

先决条件

笔者写博客之时,这几个软件为最新版本.

在微软网站下载并安装Visual Studio,我用的是2017 Community版。VS 2017 需要勾选安装C++ 环境完整安装.不然会少很多东西.

  • 下载并安装 ActivePerl。
    下载地址:http://www.activestate.com/activeperl/downloads
    ActivePerl 5.24.1 Build 2402 Windows (64-bit, x64) Windows Installer (EXE)
     
  • 下载并安装Nasm汇编器,并将 C:\Program Files\NASM 添加到系统环境变量Path中,安装的时候可选。
    下载地址:http://www.nasm.us/
    nasm-2.13.01-installer-x64.exe
     
  • 下载并安装 OpenSSL。
    下载地址:http://www.openssl.org/
    openssl-1.0.2l.tar.gz, openssl-1.1.1i.tar.gz
     

1.0.2版本和 1.1.1版本的编译方式不一样这里分为两种方式

1.0.2版本

在完成所有上述步骤,我们就可以解压缩OpenSSL包(解压至:E:openssl-1.0.2l),在对它进行修改便可以编译了。解压后的目录中有两个文件INSTALL.W32、INSTALL.W64需要被关注。打开其中任何一个文件,你会看到如何编译OpenSSL的各个步骤。

1.打开2017控制台
开始-所有程序—Visual Studio 2017——x64 Native Tools Command Prompt for VS 2017
定位到  X:openssl-1.0.2l

编译64位的需要用x64 Native Tools Command Prompt for VS 2017
编译32位的需要用x86 Native Tools Command Prompt for VS 2017

2.配置编译文件及安装目录,输入

perl Configure VC-WIN32 --perfix=E:\OpenSSL (将其安装到E:\OpenSSL)。

# perl Configure { VC-WIN32 | VC-WIN64A | VC-WIN64I | VC-CE }
VC-WIN32 | VC-WIN64A  分别对应 x86和x64

编译Win32: perl Configure VC-WIN32 --prefix=E:\OpenSSL
编译Win64: perl Configure VC-WIN64A

3.搭建编译环境:

x86
ms\do_nasm
ms\do_ms

x64
ms\do_nasm
ms\do_win64a

# 对于64位编译,将msdo_ms替换成msdo_win64a

如果没有用第一步的 VS 2017 命令行工具打开 则需要手动初始化编译环境.

将命令提示符定位到
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build, X86输入 vcvars32.bat; x64 输入 vcvars64.bat

会显示Settingenvironment for using Microsoft Visual Studio 2017 x86 tools.
如果没有这一步,会提示nmake不是内部或外部命令

4.编译OpenSSL

nmake -f ms\ntdll.mak(编译动态库)
nmake -f ms\nt.mak   (编译静态库)

# 不能同时生成静态库和动态库. 要清空  out32dll 文件夹再生成另外一个.

5.输入 nmake -f ms\ntdll.mak test若最终显示passed all tests说明生成的库正确

nmake -f ms\nt.mak test

6.输入 nmake -f ms\ntdll.mak install则会在E:\OpenSSL目录下生成bin、include、lib、ssl四个文件夹

nmake -f ms\nt.mak install

提示:

1.以上编译的是release库,若编译debug库,则将以上第2步中的VC-WIN32改成debug-VC-WIN32, VC-WIN64A改成debug-VC-WIN64A即可
2.若生成不带汇编支持的库,则需将以上第2步用perl Configure VC-WIN64A no-asm --prefix=E:\OpenSSL\替换即可
3.E:\OpenSSL\openssl-1.0.2l\tmp32文件夹下包含相应的汇编文件

1.1.1版本

随着新的1.1.0版本的发布,构建过程发生了变化。
从1.1.0开始,没有 ms\do_*.bat 文件了。

x32 compilation on Windows:

perl Configure VC-WIN32
nmake
nmake test

x64A compilation on Windows:

perl Configure VC-WIN64A no-shared no-capieng --perfix=E:\openssl-1.1.1i\build64-static-no-capi
# perl Configure VC-WIN64A [no-shared|shared]
nmake
nmake test
# 测试通过修改 makefile 的 INSTALLTOP_dir=  参数设置的有问题
nmake install

注意事项

其他项目调用编译好的 openssl 的静态库时在 windows 中会遇到这个错误 Windows CAPI library
因为 openssl 调用了 Windows 的加密库但是你的项目没有添加这个库.
有两种方式解决这个问题.

第一种

项目不需要这个在编译的时候去掉 CAPI engine
编译 openssl 的时候添加 no-capieng 即可解决

第二种

在项目里面添加需要的静态库 crypt32.lib
项目属性 - 链接器 - 输入 - 附加依赖项 中加入: crypt32.lib

Snipaste_2020-12-23_03-31-17.png

1>libcrypto.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertFreeCertificateContext@4 referenced in function _capi_free_key
1>libcrypto.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertGetCertificateContextProperty@16 referenced in function _capi_get_prov_info
1>libcrypto.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertOpenStore@20 referenced in function _capi_open_store
1>libcrypto.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertFindCertificateInStore@24 referenced in function _capi_find_cert
1>libcrypto.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertEnumCertificatesInStore@8 referenced in function _capi_find_cert
1>libcrypto.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertCloseStore@8 referenced in function _capi_find_key
1>libcrypto.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertDuplicateCertificateContext@4 referenced in function _capi_load_ssl_client_cert

Snipaste_2020-12-22_21-03-50.png

奇怪的报错

NMAKE : fatal error U1073: don't know how to make '"crypto\bn\bn_dh.c"'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX64\x64\nmake.exe"' : return code '0x2'
Stop.

再执行nmake 就可以了.

1.0.2版本原文
Windows 下编译 OpenSSL
如何在 Windows 下编译 OpenSSL VS2013
OpenSSL: Nmake fatal error U1077: 'ias' : return code '0x1'

1.1.1版本原文
Why is there no msdo_ms.bat after perl Configure VC-WIN64A?
Compile OpenSSL 1.1.1 with VS 2017 Statically or Dinamically include removed macros.
openssl-1.1.0 - Linker error on Windows

其他
http://download.videolan.org/pub/pub/videolan/vlc/last/win64/


扫描二维码,在手机上阅读!

添加新评论