openSSL1.1.1的编译

前言

准备编译一个开源工程, 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
http://www.activestate.com/activeperl
下载x64版 :
http://downloads.activestate.com/ActivePerl/releases/5.24.1.2402/ActivePerl-5.24.1.2402-MSWin32-x64-401627.exe

安装ActivePerl-5.24.1.2402-MSWin32-x64-401627.exe到D:\Perl64, 安装时跳过新版本检测,全部安装.

下载OpenSSL

https://www.openssl.org/source/
版本, 1.0.1h以上, 选最新版本.
https://github.com/openssl/openssl.git
迁出到D:\3rd\openssl

编译OpenSSL

编译指南: D:\3rd\openssl\NOTES.WIN

nasm

OpenSSL编译需要nasm(http://www.nasm.us), 下载安装到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-lib
Configuring 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-WIN32

It 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 can
install dmake.exe with the Perl Package Manager by running:

    ppm install dmake


PERL          =D:\Perl64\bin\perl.exe
PERLVERSION   =5.24.1 for MSWin32-x64-multi-thread
HASHBANGPERL  =/usr/bin/env perl
CC            =cl
CFLAG         =-W3 -wd4090 -Gs0 -GF -Gy -nologo -DOPENSSL_SYS_WIN32 -DWIN32_LEAN
_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE -DUNICODE -D_UNICODE /MD /O2
CXX           =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 /O2
DEFINES       =OPENSSL_USE_APPLINK DSO_WIN32 NDEBUG OPENSSL_THREADS OPENSSL_NO_S
TATIC_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 RMD1
60_ASM AES_ASM VPAES_ASM WHIRLPOOL_ASM GHASH_ASM ECP_NISTZ256_ASM PADLOCK_ASM PO
LY1305_ASM
EX_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有了编译好的openSSL
D:\openssl-static-lib>tree
卷 dat 的文件夹 PATH 列表
卷序列号为 66A6-68F9
D:.
├─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 <stdlib.h>

// 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 <openssl/engine.h>
#include <openssl/conf.h>
#include <openssl/crypto.h> // for CRYPTO_malloc_init
#include <openssl/pkcs12.h>
#include <openssl/x509.h>

#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

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenSSL是一个开放源代码的软件库,提供了一系列的加密算法和安全通信协议的实现。OpenSSL 1.1.1是OpenSSL的一个版本,其编译好的lib库能让开发者在自己的应用程序中使用OpenSSL的功能。 编译好的lib库是指将源代码经过编译后生成的库文件,可以方便地在应用程序中直接引用。对于OpenSSL 1.1.1来说,编译好的lib库可以被用于开发各种基于加密的应用程序,比如网络通信、安全传输等。 使用OpenSSL 1.1.1编译好的lib库,开发者可以调用库中的函数和方法,实现各种加解密操作。例如,可以使用库中的函数生成密钥、加密数据、解密数据、进行数字签名等。同时,OpenSSL 1.1.1还提供了各种加密算法的实现,如AES、RSA、SHA等,开发者可以根据自己的需求选择适合的算法来保护数据的安全性。 此外,OpenSSL 1.1.1还支持各种安全通信协议,如SSL(Secure Sockets Layer)和TLS(Transport Layer Security)。这意味着开发者可以使用OpenSSL 1.1.1编译好的lib库来开发安全的网络通信应用程序,保证数据在传输过程中的机密性和完整性。 总之,OpenSSL 1.1.1编译好的lib库是一个强大的工具,可供开发者使用来保护数据的安全性和进行安全通信。它的使用广泛,可以用于各种不同类型的应用程序开发,为应用程序提供强大的加密和安全功能。 ### 回答2: OpenSSL是一个开源的软件库,提供了用于通信安全的加密和解密功能。OpenSSL 1.1.1是最新版本的OpenSSL,具有许多新的功能和改进。如果你已经成功地编译好了OpenSSL 1.1.1版本的库,那么你可以获得以下几个好处。 首先,OpenSSL 1.1.1版本引入了TLS 1.3协议的支持。TLS 1.3是应用层与传输层安全协议中最新的版本,具有更高的安全性和更快的连接速度。通过编译好的OpenSSL 1.1.1库,你可以使用TLS 1.3协议来保护你的网络通信。 其次,OpenSSL 1.1.1还改进了对密码套件的选择和配置。你可以根据自己的需求,选择合适的密码套件来提供加密和解密功能。这些密码套件包括AES、ChaCha20、Poly1305等,可以提供不同级别的加密强度。 另外,OpenSSL 1.1.1还增加了安全性改进,修复了一些已知的安全漏洞。这意味着你可以更安全地使用OpenSSL库来保护你的数据和通信。 最后,编译好的OpenSSL 1.1.1库可以在各种平台和操作系统上使用,并与许多其他软件和应用程序进行集成。你可以将其用于开发网络安全产品、构建安全的服务器应用程序,或者用于测试和评估网络安全性能。 总之,如果你已经成功地编译OpenSSL 1.1.1库,那么你可以获得更高安全性、更快连接速度和更灵活的配置选项。这是一个强大和可靠的软件库,可以帮助你保护你的数据和通信安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值