openSSL1.1.1的编译
发布日期:2021-06-30 22:15:21
浏览次数:2
分类:技术文章
本文共 5762 字,大约阅读时间需要 19 分钟。
前言
准备编译一个开源工程, git下来看说明, 说要openSSL.
那就先编译openSSL. 开源工程说的挺NB的, 要用户git最新版的openSSL:) 一般开源软件只敢说, 本软件要某个第三方库的某个特定范围的版本:P记录openSSL1.1.1的编译过程
编译环境
Win7X64SP1
vs2013 nasm 因为是自己的开发机, 杂7杂8的装了好多(vc6, vs2010,android开发环境, 不知道对编译过程是否有负面影响), 也没有搞一个干净的编译环境(太费时间了, 硬盘空间也不太够装虚拟机, 新硬盘还没挂上去). 我自己能编译的过就够了.用vs2010编译不过
用vs2013命令行(VS2013 x86 Native Tools Command Prompt)可以编译过 no-shared 选项不行, 不能加, 编译不过去.activeperl
openSSL的编译要用activeperl
下载activeperl 下载x64版 :安装ActivePerl-5.24.1.2402-MSWin32-x64-401627.exe到D:\Perl64, 安装时跳过新版本检测,全部安装.
下载OpenSSL
版本, 1.0.1h以上, 选最新版本. 迁出到D:\3rd\openssl
编译OpenSSL
编译指南: D:\3rd\openssl\NOTES.WIN
nasm
OpenSSL编译需要nasm(), 下载安装到c:\nasm, 将nasm.exe加入环境变量.
建立文件夹 d:\openssl-static-lib, 用于存放openSSL输出文件. 准备编译openSSL静态库.vs2013命令行
打开vs2013的x86本地工具命令行(VS2013 x86 Native Tools Command Prompt), 运行下列命令
cd D:\3rd\openssl d: perl Configure VC-WIN32 –prefix=d:\openssl-static-lib屏幕输出
d:\3rd\openssl>perl Configure VC-WIN32 --prefix=d:\openssl-static-libConfiguring OpenSSL version 1.1.1-dev (0x10101000L) no-aria [default] OPENSSL_NO_ARIA (skip dir) no-asan [default] OPENSSL_NO_ASAN no-crypto-mdebug [default] OPENSSL_NO_CRYPTO_MDEBUG no-crypto-mdebug-backtrace [default] OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE no-ec_nistp_64_gcc_128 [default] OPENSSL_NO_EC_NISTP_64_GCC_128 no-egd [default] OPENSSL_NO_EGD no-external-tests [default] OPENSSL_NO_EXTERNAL_TESTS no-fuzz-afl [default] OPENSSL_NO_FUZZ_AFL no-fuzz-libfuzzer [default] OPENSSL_NO_FUZZ_LIBFUZZER no-heartbeats [default] OPENSSL_NO_HEARTBEATS no-md2 [default] OPENSSL_NO_MD2 (skip dir) no-msan [default] OPENSSL_NO_MSAN no-rc5 [default] OPENSSL_NO_RC5 (skip dir) no-sctp [default] OPENSSL_NO_SCTP no-ssl-trace [default] OPENSSL_NO_SSL_TRACE no-ssl3 [default] OPENSSL_NO_SSL3 no-ssl3-method [default] OPENSSL_NO_SSL3_METHOD no-tls13downgrade [default] OPENSSL_NO_TLS13DOWNGRADE no-tls1_3 [default] OPENSSL_NO_TLS1_3 no-ubsan [default] OPENSSL_NO_UBSAN no-unit-test [default] OPENSSL_NO_UNIT_TEST no-weak-ssl-ciphers [default] OPENSSL_NO_WEAK_SSL_CIPHERS no-zlib [default] no-zlib-dynamic [default]Configuring for VC-WIN32It looks like you don't have either nmake.exe or dmake.exe on your PATH,so you will not be able to execute the commands from a Makefile. You caninstall dmake.exe with the Perl Package Manager by running: ppm install dmakePERL =D:\Perl64\bin\perl.exePERLVERSION =5.24.1 for MSWin32-x64-multi-threadHASHBANGPERL =/usr/bin/env perlCC =clCFLAG =-W3 -wd4090 -Gs0 -GF -Gy -nologo -DOPENSSL_SYS_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE -DUNICODE -D_UNICODE /MD /O2CXX =c++CXXFLAG =-W3 -wd4090 -Gs0 -GF -Gy -nologo -DOPENSSL_SYS_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE -DUNICODE -D_UNICODE /MD /O2DEFINES =OPENSSL_USE_APPLINK DSO_WIN32 NDEBUG OPENSSL_THREADS OPENSSL_NO_STATIC_ENGINE OPENSSL_PIC OPENSSL_BN_ASM_PART_WORDS OPENSSL_IA32_SSE2 OPENSSL_BN_ASM_MONT OPENSSL_BN_ASM_GF2m SHA1_ASM SHA256_ASM SHA512_ASM RC4_ASM MD5_ASM RMD160_ASM AES_ASM VPAES_ASM WHIRLPOOL_ASM GHASH_ASM ECP_NISTZ256_ASM PADLOCK_ASM POLY1305_ASMEX_LIBS =ws2_32.lib gdi32.lib advapi32.lib crypt32.lib user32.lib
生成makefile
“perl Configure VC-WIN32 –prefix=d:\openssl-static-lib”命令运行后,如果没报错,
就生成了D:\3rd\openssl\makefile文件运行makefile
运行如下命令, 开始编译openSSL
nmake -f makefile 时间还挺长的,等着编译完. 编译完没看到报错, 但是也没有提示编译成功, 测试用例全部通过的信息. 运行openSSL的testcase, 看是否全部测试通过. nmake test安装编译好的openSSL
运行命令 “nmake -f makefile install”
nmake -f makefile install安装完后, D:\openssl-static-lib有了编译好的openSSLD:\openssl-static-lib>tree卷 dat 的文件夹 PATH 列表卷序列号为 66A6-68F9D:.├─bin├─html│ ├─man1│ ├─man3│ ├─man5│ └─man7├─include│ └─openssl└─lib└─engines-1_1
测试openSSL静态库是否有效
因为是用vs2013命令行编译的openSSL.
就用vs2013写个测试程序测试一下,是否openSSL库有效. 测试过了, 编译通过, openSSL函数好使. 但是发现新版openSSL函数和旧版不兼容, 这挺烦人的…// testOpenSSL.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include// IDE : vs2013// inc目录 : D:\openssl-static-lib\include// lib目录 : D:\openssl-static-lib\lib// 编译选项 /MT or /MTD// 将 libcrypto - 1_1.dll, libssl-1_1.dll拷贝到exe统计目录#include #include #include // for CRYPTO_malloc_init#include #include #pragma comment(lib, "libcrypto.lib")#pragma comment(lib, "libssl.lib")void OpenSslBegin();void OpenSslEnd();int _tmain(int argc, _TCHAR* argv[]){ OpenSslBegin(); // use openSSL... printf("openSSL1.1.1 info:\n"); printf("%s\n", SSLeay_version(OPENSSL_VERSION)); printf("%s\n", SSLeay_version(OPENSSL_CFLAGS)); printf("%s\n", SSLeay_version(OPENSSL_BUILT_ON)); printf("%s\n", SSLeay_version(OPENSSL_PLATFORM)); printf("%s\n", SSLeay_version(OPENSSL_DIR)); printf("%s\n", SSLeay_version(OPENSSL_ENGINES_DIR)); /** run result openSSL1.1.1 info: OpenSSL 1.1.1-dev xx XXX xxxx compiler: cl " "VC-WIN32 built on: reproducible build, date unspecified platform: OPENSSLDIR: "C:\Program Files (x86)\Common Files\SSL" ENGINESDIR: "D:\openssl-static-lib\lib\engines-1_1" */ OpenSslEnd(); printf("END\n"); system("pause"); return 0;}void OpenSslBegin(){ OPENSSL_malloc_init(); // 不向下兼容, CRYPTO_malloc_init 没了... // 不兼容的代码, 旧版openSSL是好使的 // ERR_load_crypto_strings(); // OpenSSL_add_all_algorithms(); // ENGINE_load_builtin_engines();}void OpenSslEnd(){ CONF_modules_unload(1); EVP_cleanup(); ENGINE_cleanup(); CRYPTO_cleanup_all_ex_data(); ERR_remove_state(0); ERR_free_strings();}
备注
本来要编译openSSL静态库, 编译出来发现还是使用openSSL动态库.
可能是”perl Configure VC-WIN32 –prefix=d:\openssl-static-lib”还要加参数指定编译openSSL静态库, 以后再研究. openSSL自带的文档没仔细看不行啊, 这试验做的太糙了. 对自己很不满意:P转载地址:https://lostspeed.blog.csdn.net/article/details/69492531 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月30日 14时03分32秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
基础架构系列篇-系统centos7中docker安装分布式文件存储服务minio
2019-04-30
知识点记录-java判断系统是linux或windows
2019-04-30
知识点记录-springboot静态资源映射路径
2019-04-30
微服务springcloud2系列篇-配置与注册nacos组件
2019-04-30
用户权限设计-基于RBAC模型
2019-04-30
微服务springcloud2系列篇-网关GATEWAY跨域问题
2019-04-30
软件质量的8个特性
2019-04-30
应届渣渣前端的艰难求职之路
2019-04-30
2021年不可错过的17种JS优化技巧(一)
2019-04-30
月薪15~20k的前端面试问什么?
2019-04-30
在 Vue 中用 Axios 异步请求API
2019-04-30
MySQL进阶查询(SELECT 语句高级用法)
2019-04-30
Mysql 之主从复制
2019-04-30
【工具使用】新版CSDN-markdown编辑器使用指南
2019-04-30
【NLP学习笔记】中文分词(Word Segmentation,WS)
2019-04-30
【超越白皮书7】你需要知道关于ETH2.0的几个事实
2019-04-30
对于时间复杂度的通俗理解
2019-04-30
如何输入多组数据并输出每组数据的和?
2019-04-30
行阶梯型矩阵
2019-04-30
图像处理学习笔记
2019-04-30