Advertisement

Windows10+VS2017下安装和 编译openssl库

阅读量:

文章目录

已更新至2019年11月28日16:35:50。以下是关于该问题的详细说明及解决方案。在进行环境准备之前,请确保您已按照以下步骤完成安装。具体操作步骤如下:首先,按照指导文档完成软件安装;接着,按照说明文档完成编译过程。如果您需要使用Openssl库,请参考以下建议。最后,总结本次操作并获取所需资源。您可以通过以下链接下载编译好的动态Openssl库文件(仅适用于企业版用户)。

更新 2019年11月28日 16:35:50

已经成功地重新编译了最新版本的1.1。如需更多信息,请访问博客Windows10+VS2017下安装和 编译openssl 1.1版本库

问题

编译该库时,由于Qt 下的MSVC版本不支持openssl中的https请求,会报错信息如下:

复制代码
    qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
    Network Requst Error =  QNetworkReply::UnknownNetworkError
    
    
      
      
    
    AI助手

参考网上的信息,获取Qt自带的libeay32.dll和ssleay32.dll文件。其中,在mingw环境下能够正常运行,而msvc环境下则完全无法运行。如图所示,库的位置。

在这里插入图片描述

尝试了三个文件夹,发现对于MSVC版本没有问题,于是决定自行编译一个openssl。


环境准备

首先列出我自己的下载的环境包

  1. 安装和配置Visual Studio 2017(无论是商业版还是社区版,操作方式相同)
  2. 安装ActivePerl。获取下载链接如下:

安装 Nasm 汇编器程序后,需将 D:\Program Files\NASM 添加到系统环境变量 Path 中。访问以下链接获取下载地址:http://www.nasm.us/ 我下载的版本是 nasm-2.14.02-installer-x64.exe

安装OpenSSL时,可能会遇到启动缓慢的问题,请确保耐心操作。获取OpenSSL源码的链接如下:https://www.openssl.org/source/ 我下载的版本为:openssl-1.0.2s.tar.gz

安装步骤

安装ActivePerl软件时,需按照提示逐步完成安装操作。软件在安装过程中会自动配置环境变量。为了验证安装是否成功,用户可执行命令行工具,进入安装目录,例如,软件安装在D:\ Perl64\目录下时,用户可进入D:\ Perl64\eg文件夹,执行命令 "perl example.pl" 。若屏幕上显示 "Hello from ActivePerl!" ,则表明安装已成功。

安装目录如下:

在这里插入图片描述

将 OpenSSL 包解压至D:\openssl-1.0.2s,便可以进行编译了。

请注意:解压后的目录中包含两个文件,即 INSTALL.W32 和 INSTALL.W64,这些文件涵盖了 OpenSSL 的所有编译步骤。

编译步骤

打开命令提示符,定位至D:\openssl-1.0.2s:

在这里插入图片描述

输入 perl Configure VC-WIN32 --prefix=D:\OpenSSL(将其安装到 D:\OpenSSL):

在这里插入图片描述

输入 ms\do_nasm:

在这里插入图片描述

请将命令提示符指向D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build,其中如果是2015版本,则应设置为D:\Program Files\Microsoft Visual Studio 14.0\VC\bin的位置。然后,您需要运行vcvars32.bat 这个批处理文件。

在这里插入图片描述

如果没有这一步,会提示 nmake 不是内部或外部命令等一系列错误。

将命令提示符重新定位至 D:\openssl-1.0.2m,然后执行编译指令 nmake -f ms\ntdll.mak:在进行静态编译时,应指定目标文件为 ms\nt.mak

在这里插入图片描述

如果遇到上述图片中的错误,请将CMD的命令提示符切换,重新执行步骤4。否则,系统会提示nmake不是内部或外部命令等错误信息。

如图:

在这里插入图片描述

完成后,系统将在D:\openssl-1.0.2s目录下创建一个名为out32dll的文件夹,其中包含了多个动态库和执行文件:

在这里插入图片描述
在这里插入图片描述

请运行命令 nmake -f ms\ntdll.mak test。若测试结果为 passed all tests,则表明生成的动态链接库已成功构建。特别提示:请确保在执行此操作前,已完成了所有必要的配置和准备工作。

编译 DLL动态库文件,通过make命令完成编译任务。编译完成后,系统将在...目录下生成一个out32dll文件夹,其中包含静态库、DLL动态库文件以及.exe程序文件,完成编译任务后需要稍作等待。

  • 执行测试任务:nmake -f ms\ntdll.mak test
    • 验证前一步骤的编译结果,若成功则最终输出“passed all tests”提示信息。
    • 运行安装命令:nmake -f ms\ntdll.mak install ,若成功则将在D:\openssl-1.0.2q目录中生成bin、include、lib、ssl四个文件夹。

通过运行命令 nmake -f ms\nt.mak ,可以同时进行静态库的编译与测试,具体命令为 nmake -f ms\nt.mak test 。在上一步骤完成后,若编译成功,则会输出“passed all tests”字样。通过执行命令 nmake -f ms\nt.mak install ,如果成功,会在D:\openssl-1.0.2q目录下生成bin、include、lib、ssl四个文件夹。

清除上次OpenSSL动态库的编译,以便重新编译:nmake -f ms\ntdll.mak clean

清除上次OpenSSL静态库的编译,以便重新编译:nmake -f ms\nt.mak clean

我编译的是静态库,所以执行的是静态测试命令:

如图

在这里插入图片描述
在这里插入图片描述

运行以下命令:nmake -f ms\ntdll.mak install ,其中针对静态库,可参考上面的命令说明,此处不再赘述。

在这里插入图片描述

完成之后,会在 D:\OpenSSL 目录下生成 bin、include、lib、ssl 四个文件夹:

在这里插入图片描述
在这里插入图片描述

使用Openssl库

在Visual Studio 2017环境中,可以通过OpenSSL库进行安全编码功能的实现。具体的安装与配置参考Visual Studio 2017 (VS2017)安装、配置和使用。编辑工程属性时,需完成以下配置:1)在配置属性中,进入VC++目录设置,添加编译后库文件存放目录"D:\OpenSSL\include";2)在"Library files"中新增目录"D:\OpenSSL\lib";3)在链接器的附加依赖项中,添加libeay32.lib和ssleay32.lib,以完成OpenSSL库的引用。

下面讲一下利用openssl生成RSA公私密钥对。

在Windows环境下,打开OPENSSL安装目录bin文件下面的openssl.exe。

1)生成RSA私钥:genrsa -out rsa_private_key.pem 1024
该命令会生成1024位的私钥
2) 生成RSA公钥:rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
此时,我们可以看到一个文件名为rsa_public_key.pem的文件,打开它,可以看到-----BEGIN PUBLIC KEY-----开头,
-----END PUBLIC KEY-----结尾的没有换行的字符串,这个就是公钥
3)把RSA私钥转换成PKCS8格式:pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM –nocrypt
生成的结果就是PKCS8格式的私钥

最后总结一下

  • 以上编译的是 release 版本,若要编译 debug 版本,只需在第 2 步中将 VC-WIN32 替换为 debug-VC-WIN32 即可。
  • 以上编译的是 win32 位版本,若要编译 win64 位版本,则需在第 2 步中使用 perl Configure VC-WIN64A --prefix=E:\OpenSSL (最好也下载 64 位的 VC),即用 VC-WIN32 替换 VC-WIN64A
  • 若要编译静态库,则需将第 2 步中的 ms\nt.mak 替换掉 ms\ntdll.mak
  • 若要生成不带汇编支持的库,则需在第 2、3 步中使用 perl Configure VC-WIN32 no-asm --prefix=E:\OpenSSLms\do_ms
  • 在 D:\openssl-1.0.2s\tmp32dll 文件夹中包含了相应的汇编文件。
  • 为了清除上次编译的 OpenSSE 动态库,可以执行 nmake -f ms\ntdll.mak clean
  • 为了清除上次编译的 OpenSSE 静态库,可以执行 nmake -f ms\nt.mak clean

仅限企业版的动态Openssl库文件,编译好的VS2017下载


参考文章:
https://www.cnblogs.com/wyt007/p/8022199.html

全部评论 (0)

还没有任何评论哟~