Windows10+VS2017下安装和 编译openssl库

文章目录

    • 问题
    • 环境准备
    • 安装步骤
    • 编译步骤
    • 使用Openssl库
    • 最后总结一下
    • 编译好的VS2017动态Openssl库文件下载

问题

编译该库,是因为Qt 下的MSVC版本不支持openssl中的https请求,会报错如下:

qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
Network Requst Error =  QNetworkReply::UnknownNetworkError

根据网上的说法去拿Qt自带的libeay32.dll和ssleay32.dll,在mingw下还可以跑通,msvc下完全跑不通
如图,库的路径
Windows10+VS2017下安装和 编译openssl库_第1张图片
三个文件夹都试过,对于MSVC版本都没有,于是想着自己编译一下openssl


环境准备

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

  1. 下载并安装 Visual Studio 2017 (我的是企业版,社区版也一样)
  2. 下载并安装 ActivePerl。
    • 下载地址:http://www.activestate.com/activeperl/downloads
    • 我下载的是:ActivePerl-5.26.3.2603-MSWin32-x64-a95bce075.exe
  3. 下载并安装 Nasm 汇编器,并将 D:\Program Files\NASM 添加到系统环境变量 Path 中。
    下载地址:http://www.nasm.us/
    我下载的是:nasm-2.14.02-installer-x64.exe
  4. 下载并安装 OpenSSL (可能打开会很慢,请耐心等待!!!)
    openssl源码,下载链接:https://www.openssl.org/source/
    我下载的是:openssl-1.0.2s.tar.gz

安装步骤

  1. 安装ActivePerl软件根据提示一步一步进行安装即可,安装过程软件会自动设置环境变量。要确认是否安装成功,我们可以利用cmd命令行的形式输入指令进入到安装目录,比如安装在D:\Perl64\下,进入到D:\Perl64\eg目录,输入 “perl example.pl”, 如果出现如下图所示的:“Hello from ActivePerl!”,则表示软件安装成功。

    安装目录如下:
    Windows10+VS2017下安装和 编译openssl库_第2张图片

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

注意: 解压后的目录中有两个文件 - INSTALL.W32、INSTALL.W64,包含了 OpenSSL 的各个编译步骤。

编译步骤

  1. 打开命令提示符,定位至D:\openssl-1.0.2s:
    Windows10+VS2017下安装和 编译openssl库_第3张图片

  2. 输入 perl Configure VC-WIN32 --prefix=D:\OpenSSL(将其安装到 D:\OpenSSL):
    Windows10+VS2017下安装和 编译openssl库_第4张图片

  3. 输入 ms\do_nasm:
    Windows10+VS2017下安装和 编译openssl库_第5张图片

  4. 将命令提示符定位至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
    Windows10+VS2017下安装和 编译openssl库_第6张图片
    如果没有这一步,会提示 nmake 不是内部或外部命令等一系列错误。

  5. 再次将命令提示符定位至 D:\openssl-1.0.2m,然后输入 nmake -f ms\ntdll.mak:(如果要静态编译,则用 ms\nt.mak
    Windows10+VS2017下安装和 编译openssl库_第7张图片
    如果出现上面图片的错误,请切换之CMD的命令提示符,重复步骤4开始,否则,会提示 nmake 不是内部或外部命令等一系列错误

    如图:
    Windows10+VS2017下安装和 编译openssl库_第8张图片
    完成之后,会在 D:\openssl-1.0.2s 目录下生成一个名为 out32dll 的文件夹,里面包含了一些动态库和 exe 文件:Windows10+VS2017下安装和 编译openssl库_第9张图片
    Windows10+VS2017下安装和 编译openssl库_第10张图片

  6. 输入 nmake -f ms\ntdll.mak test,若最终显示 passed all tests 则说明生成的库正确:
    打住!!!打住!!!打住!!!
    这里先说明一下:

  • 运行 nmake -f ms\ntdll.mak 进行编译 动态库
    执行make进行编译,执行完后会在openssl-1.0.2s目录下生成一个out32dll文件夹,里面包含了一些静态库、动态库和.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

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

如图
Windows10+VS2017下安装和 编译openssl库_第11张图片
Windows10+VS2017下安装和 编译openssl库_第12张图片

  1. 输入 nmake -f ms\ntdll.mak install:(静态库的看上面的命令说明,这里不重复了)
    Windows10+VS2017下安装和 编译openssl库_第13张图片
    完成之后,会在 D:\OpenSSL 目录下生成 bin、include、lib、ssl 四个文件夹:
    Windows10+VS2017下安装和 编译openssl库_第14张图片
    Windows10+VS2017下安装和 编译openssl库_第15张图片

使用Openssl库

在VS2017里使用OpenSSL库
具体的vs2017使用参考Visual Studio 2017 (VS2017)安装、配置和使用
编辑工程属性:
1)配置属性——VC++目录——在include包含目录中新增”D:\OpenSSL\include”(存放编译后的库文件的目录中);
2)VC++目录——”Library files”选择中新增目录”D:\OpenSSL\lib”。
3)配置属性——链接器——输入——附加依赖项——libeay32.lib 和ssleay32.lib即可

下面讲一下利用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 (最好perl也下载64位的) 也就是 VC-WIN32 替换成 VC-WIN64A
  • 若要编译静态库,则用 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 文件夹下包含相应的汇编文件。
  • 清除上次OpenSSL动态库的编译,以便重新编译:nmake -f ms\ntdll.mak clean
  • 清除上次OpenSSL静态库的编译,以便重新编译:nmake -f ms\nt.mak clean

编译好的VS2017动态Openssl库文件下载


参考文章:
https://www.cnblogs.com/wyt007/p/8022199.html
https://blog.csdn.net/liang19890820/article/details/51658574

你可能感兴趣的:(Qt,Vs)