win10 vs2015 openssl-1.0.2j编译

来源:互联网 发布:网络部各人员提成方案 编辑:程序博客网 时间:2024/05/21 09:12

1 openssl编译基本信息

1.1 openssl版本信息

openssl 官网:https://www.openssl.org/
稳定版本LTS版本:https://www.openssl.org/source/openssl-1.0.2j.tar.gz

官网上说1.0.2版本是支持到2019-12-31的长期支持版本。
官网版本说明:https://www.openssl.org/policies/releasestrat.html

•Version 1.1.0 will be supported until 2018-08-31.
•Version 1.0.2 will be supported until 2019-12-31 (LTS).
•Support for version 1.0.1 will cease on 2016-12-31. No further releases of 1.0.1 will be made after that date. Security fixes only will be applied to 1.0.1 until then.
•Version 1.0.0 is no longer supported. •Version 0.9.8 is no longer supported.

1.2 windows版本编译依赖

编译opensll windows 版本需要 perl,记得安装时设置perl的bin 目录到系统path环境变量中,是你在cmd窗口可以正常使用perl -version查看版本信息即可。
perl下载地址 http://www.activestate.com/activeperl/downloads
我使用的是ActivePerl-5.24.0.2400-MSWin32-x86-64int-300560.exe版本。x64为系统应该2个都可以。
ActivePerl-5.24.0.2400-MSWin32-x86-64int-300560.exe
ActivePerl-5.24.0.2400-MSWin32-x64-300558.exe

1.3 操作系统环境

windows 10 企业版本(10.0.14393)。vs2015 update3(14.0.25431.01)。如果编译其他vs版本,只要把vs2015换成对应visual studio版本即可。

1.4 源码下载

源码获取有3中方式:
A:在官网下载文档版本压缩包openssl-1.0.2j.tar.gz。(https://www.openssl.org/source/openssl-1.0.2j.tar.gz)
B:从openssl私有git仓库下载。https://www.openssl.org/source/gitrepo.html。

git clone git://git.openssl.org/openssl.git

C:github上opensll的代码仓库。建议使用github上的代码。
github地址:https://github.com/openssl/openssl

使用cmd命令窗口,进入d盘源码目录,进行如下操作:

cd d:\gitgit clone https://github.com/openssl/openssl.gitcd d:\git\opensslrem 迁出稳定版本1.0.2j,并建立自己本地分支b1.0.2jgit checkout OpenSSL_1_0_2j -b b1.0.2j

2 使用vs2015 编译openssl

直接把下面的bat脚本拷贝到你的文本中,
1 替换 Visual Studio 的路径为你自己的路径,
2 替换 d:/install/openssl-1.0.2j 为你自己的输出路径,
运行后,即可在d:/install/openssl-1.0.2j 下找到自己编译的8个版本openssl库 和 头文件。

rem 编译x86位参考INSTALL.W32说明文件rem 如果你要编译不同的visualStudio版本,每个vs版本要单独开一个cmd窗口来操作,以免受到上一个vs版本环境变量的影响。rem 使用vs2015 x86编译环境,运行下面这句话,就启用了vs2015的x86环境"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat"rem 一定要注意INSTALL.W32的文档说明,win32 release 版本需要指定no-asm,并且使用ms\do_nasm.bat脚本rem 生成win32/release静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32rmdir /S /Q tmp32perl Configure VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2015/lib/win32/releasems\do_nasm.batnmake -f ms\nt.mak installrem 运行测试程序cd out32..\ms\testcd ..rem 生成win32/release动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dllrmdir /S /Q tmp32dllperl Configure VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2015/dll/win32/releasems\do_nasm.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll..\ms\testcd ..rem 生成win32/debug静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32.dbgrmdir /S /Q tmp32.dbgperl Configure debug-VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2015/lib/win32/debugms\do_ms.batnmake -f ms\nt.mak installrem 运行测试程序cd out32.dbg..\ms\testcd ..rem 生成win32/debug动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dll.dbgrmdir /S /Q tmp32dll.dbgperl Configure debug-VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2015/dll/win32/debugms\do_ms.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll.dbg..\ms\testcd ..rem 编译x64位参考INSTALL.W64说明文件rem 如果你要编译不同的visualStudio版本,每个vs版本要单独开一个cmd窗口来操作,以免受到上一个vs版本环境变量的影响。rem 使用vs2015 x64编译环境,如果使用其他vs版本,只需修改这个运行环境"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat"rem 生成win64/release静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32rmdir /S /Q tmp32perl Configure VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2015/lib/win64/releasems\do_win64a.batnmake -f ms\nt.mak installrem 运行测试程序cd out32..\ms\testcd ..rem 生成win64/release动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dllrmdir /S /Q tmp32dllperl Configure VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2015/dll/win64/releasems\do_win64a.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll..\ms\testcd ..rem 生成win64/debug静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32.dbgrmdir /S /Q tmp32.dbgperl Configure debug-VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2015/lib/win64/debugms\do_win64a.batnmake -f ms\nt.mak installrem 运行测试程序cd out32.dbg..\ms\testcd ..rem 生成win64/debug动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dll.dbgrmdir /S /Q tmp32dll.dbgperl Configure debug-VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2015/dll/win64/debugms\do_win64a.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll.dbg..\ms\testcd ..rem vs2015 生成的4个版本90MB+rem 通常我们只需要生成的win32/release win64/release版本。rem 其他版本只是调试使用

3 使用vs2013 编译openssl

rem 编译x86位参考INSTALL.W32说明文件rem 如果你要编译不同的visualStudio版本,每个vs版本要单独开一个cmd窗口来操作,以免受到上一个vs版本环境变量的影响。rem 使用vs2013 x86编译环境 vs2013 update5 (12.0.40629.00)"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat"rem 一定要注意INSTALL.W32的文档说明,win32 release 版本需要指定no-asm,并且使用ms\do_nasm.bat脚本rem 生成win32/release静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32rmdir /S /Q tmp32perl Configure VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2013/lib/win32/releasems\do_nasm.batnmake -f ms\nt.mak installrem 运行测试程序cd out32..\ms\testcd ..rem 生成win32/release动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dllrmdir /S /Q tmp32dllperl Configure VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2013/dll/win32/releasems\do_nasm.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll..\ms\testcd ..rem 生成win32/debug静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32.dbgrmdir /S /Q tmp32.dbgperl Configure debug-VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2013/lib/win32/debugms\do_ms.batnmake -f ms\nt.mak installrem 运行测试程序cd out32.dbg..\ms\testcd ..rem 生成win32/debug动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dll.dbgrmdir /S /Q tmp32dll.dbgperl Configure debug-VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2013/dll/win32/debugms\do_ms.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll.dbg..\ms\testcd ..rem 编译x64位参考INSTALL.W64说明文件rem 使用vs2013 x64编译环境,如果使用其他vs版本,只需修改这个运行环境"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\vcvars64.bat"rem 生成win64/release静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32rmdir /S /Q tmp32perl Configure VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2013/lib/win64/releasems\do_win64a.batnmake -f ms\nt.mak installrem 运行测试程序cd out32..\ms\testcd ..rem 生成win64/release动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dllrmdir /S /Q tmp32dllperl Configure VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2013/dll/win64/releasems\do_win64a.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll..\ms\testcd ..rem 生成win64/debug静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32.dbgrmdir /S /Q tmp32.dbgperl Configure debug-VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2013/lib/win64/debugms\do_win64a.batnmake -f ms\nt.mak installrem 运行测试程序cd out32.dbg..\ms\testcd ..rem 生成win64/debug动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dll.dbgrmdir /S /Q tmp32dll.dbgperl Configure debug-VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2013/dll/win64/debugms\do_win64a.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll.dbg..\ms\testcd ..rem vs2013 生成的8个版本105MBrem 通常我们只需要生成的win32/release win64/release版本。rem 其他版本只是调试使用

4 使用vs2012 编译openssl

rem 编译x86位参考INSTALL.W32说明文件rem 如果你要编译不同的visualStudio版本,每个vs版本要单独开一个cmd窗口来操作,以免受到上一个vs版本环境变量的影响。rem 使用vs2012 x86编译环境 vs2012 update5 (11.0.61219.00)"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\vcvars32.bat"rem 一定要注意INSTALL.W32的文档说明,win32 release 版本需要指定no-asm,并且使用ms\do_nasm.bat脚本rem 生成win32/release静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32rmdir /S /Q tmp32perl Configure VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2012/lib/win32/releasems\do_nasm.batnmake -f ms\nt.mak installrem 运行测试程序cd out32..\ms\testcd ..rem 生成win32/release动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dllrmdir /S /Q tmp32dllperl Configure VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2012/dll/win32/releasems\do_nasm.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll..\ms\testcd ..rem 生成win32/debug静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32.dbgrmdir /S /Q tmp32.dbgperl Configure debug-VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2012/lib/win32/debugms\do_ms.batnmake -f ms\nt.mak installrem 运行测试程序cd out32.dbg..\ms\testcd ..rem 生成win32/debug动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dll.dbgrmdir /S /Q tmp32dll.dbgperl Configure debug-VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2012/dll/win32/debugms\do_ms.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll.dbg..\ms\testcd ..rem 编译x64位参考INSTALL.W64说明文件rem 如果你要编译不同的visualStudio版本,每个vs版本要单独开一个cmd窗口来操作,以免受到上一个vs版本环境变量的影响。rem 使用vs2012 x64编译环境,如果使用其他vs版本,只需修改这个运行环境"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\amd64\vcvars64.bat"rem 生成win64/release静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32rmdir /S /Q tmp32perl Configure VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2012/lib/win64/releasems\do_win64a.batnmake -f ms\nt.mak installrem 运行测试程序cd out32..\ms\testcd ..rem 生成win64/release动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dllrmdir /S /Q tmp32dllperl Configure VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2012/dll/win64/releasems\do_win64a.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll..\ms\testcd ..rem 生成win64/debug静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32.dbgrmdir /S /Q tmp32.dbgperl Configure debug-VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2012/lib/win64/debugms\do_win64a.batnmake -f ms\nt.mak installrem 运行测试程序cd out32.dbg..\ms\testcd ..rem 生成win64/debug动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dll.dbgrmdir /S /Q tmp32dll.dbgperl Configure debug-VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2012/dll/win64/debugms\do_win64a.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll.dbg..\ms\testcd ..rem vs2012 生成的8个版本105MBrem 通常我们只需要生成的win32/release win64/release版本。rem 其他版本只是调试使用

5 使用vs2010 编译openssl

rem 编译x86位参考INSTALL.W32说明文件rem 如果你要编译不同的visualStudio版本,每个vs版本要单独开一个cmd窗口来操作,以免受到上一个vs版本环境变量的影响。rem 使用vs2010 x86编译环境 vs2010 SP1Rel (10.0.40219.00)"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat"rem 一定要注意INSTALL.W32的文档说明,win32 release 版本需要指定no-asm,并且使用ms\do_nasm.bat脚本rem 生成win32/release静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32rmdir /S /Q tmp32perl Configure VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2010/lib/win32/releasems\do_nasm.batnmake -f ms\nt.mak installrem 运行测试程序cd out32..\ms\testcd ..rem 生成win32/release动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dllrmdir /S /Q tmp32dllperl Configure VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2010/dll/win32/releasems\do_nasm.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll..\ms\testcd ..rem 生成win32/debug静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32.dbgrmdir /S /Q tmp32.dbgperl Configure debug-VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2010/lib/win32/debugms\do_ms.batnmake -f ms\nt.mak installrem 运行测试程序cd out32.dbg..\ms\testcd ..rem 生成win32/debug动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dll.dbgrmdir /S /Q tmp32dll.dbgperl Configure debug-VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2010/dll/win32/debugms\do_ms.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll.dbg..\ms\testcd ..rem 编译x64位参考INSTALL.W64说明文件rem 如果你要编译不同的visualStudio版本,每个vs版本要单独开一个cmd窗口来操作,以免受到上一个vs版本环境变量的影响。rem 使用vs2010 x64编译环境,如果使用其他vs版本,只需修改这个运行环境"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.bat"rem 生成win64/release静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32rmdir /S /Q tmp32perl Configure VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2010/lib/win64/releasems\do_win64a.batnmake -f ms\nt.mak installrem 运行测试程序cd out32..\ms\testcd ..rem 生成win64/release动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dllrmdir /S /Q tmp32dllperl Configure VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2010/dll/win64/releasems\do_win64a.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll..\ms\testcd ..rem 生成win64/debug静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32.dbgrmdir /S /Q tmp32.dbgperl Configure debug-VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2010/lib/win64/debugms\do_win64a.batnmake -f ms\nt.mak installrem 运行测试程序cd out32.dbg..\ms\testcd ..rem 生成win64/debug动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dll.dbgrmdir /S /Q tmp32dll.dbgperl Configure debug-VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2010/dll/win64/debugms\do_win64a.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll.dbg..\ms\testcd ..rem vs2010 生成的8个版本101MBrem 通常我们只需要生成的win32/release win64/release版本。rem 其他版本只是调试使用

6 使用vs2008 编译openssl

rem 编译x86位参考INSTALL.W32说明文件rem 如果你要编译不同的visualStudio版本,每个vs版本要单独开一个cmd窗口来操作,以免受到上一个vs版本环境变量的影响。rem 使用vs2008 x86编译环境 vs2008 SP (9.0.30729.1)"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat"rem 一定要注意INSTALL.W32的文档说明,win32 release 版本需要指定no-asm,并且使用ms\do_nasm.bat脚本rem 生成win32/release静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32rmdir /S /Q tmp32perl Configure VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2008/lib/win32/releasems\do_nasm.batnmake -f ms\nt.mak installrem 运行测试程序cd out32..\ms\testcd ..rem 生成win32/release动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dllrmdir /S /Q tmp32dllperl Configure VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2008/dll/win32/releasems\do_nasm.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll..\ms\testcd ..rem 生成win32/debug静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32.dbgrmdir /S /Q tmp32.dbgperl Configure debug-VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2008/lib/win32/debugms\do_ms.batnmake -f ms\nt.mak installrem 运行测试程序cd out32.dbg..\ms\testcd ..rem 生成win32/debug动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dll.dbgrmdir /S /Q tmp32dll.dbgperl Configure debug-VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2008/dll/win32/debugms\do_ms.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll.dbg..\ms\testcd ..rem 编译x64位参考INSTALL.W64说明文件rem 如果你要编译不同的visualStudio版本,每个vs版本要单独开一个cmd窗口来操作,以免受到上一个vs版本环境变量的影响。rem 使用vs2008 x64编译环境,如果使用其他vs版本,只需修改这个运行环境"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\vcvarsamd64.bat"rem 生成win64/release静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32rmdir /S /Q tmp32perl Configure VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2008/lib/win64/releasems\do_win64a.batnmake -f ms\nt.mak installrem 运行测试程序cd out32..\ms\testcd ..rem 生成win64/release动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dllrmdir /S /Q tmp32dllperl Configure VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2008/dll/win64/releasems\do_win64a.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll..\ms\testcd ..rem 生成win64/debug静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32.dbgrmdir /S /Q tmp32.dbgperl Configure debug-VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2008/lib/win64/debugms\do_win64a.batnmake -f ms\nt.mak installrem 运行测试程序cd out32.dbg..\ms\testcd ..rem 生成win64/debug动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dll.dbgrmdir /S /Q tmp32dll.dbgperl Configure debug-VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2008/dll/win64/debugms\do_win64a.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll.dbg..\ms\testcd ..rem vs2008 生成的8个版本99.5MBrem 通常我们只需要生成的win32/release win64/release版本。rem 其他版本只是调试使用

7 使用vs2005 编译openssl

rem 编译x86位参考INSTALL.W32说明文件rem 如果你要编译不同的visualStudio版本,每个vs版本要单独开一个cmd窗口来操作,以免受到上一个vs版本环境变量的影响。rem 使用vs2005 x86编译环境 vs2005 (8.0.50727.4039)"C:\Program Files (x86)\Microsoft Visual Studio 8\VC\bin\vcvars32.bat"rem 一定要注意INSTALL.W32的文档说明,win32 release 版本需要指定no-asm,并且使用ms\do_nasm.bat脚本rem 生成win32/release静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32rmdir /S /Q tmp32perl Configure VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2005/lib/win32/releasems\do_nasm.batnmake -f ms\nt.mak installrem 运行测试程序cd out32..\ms\testcd ..rem 生成win32/release动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dllrmdir /S /Q tmp32dllperl Configure VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2005/dll/win32/releasems\do_nasm.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll..\ms\testcd ..rem 生成win32/debug静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32.dbgrmdir /S /Q tmp32.dbgperl Configure debug-VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2005/lib/win32/debugms\do_ms.batnmake -f ms\nt.mak installrem 运行测试程序cd out32.dbg..\ms\testcd ..rem 生成win32/debug动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dll.dbgrmdir /S /Q tmp32dll.dbgperl Configure debug-VC-WIN32 no-asm --prefix=d:/install/openssl-1.0.2j/vs2005/dll/win32/debugms\do_ms.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll.dbg..\ms\testcd ..rem 编译x64位参考INSTALL.W64说明文件rem 如果你要编译不同的visualStudio版本,每个vs版本要单独开一个cmd窗口来操作,以免受到上一个vs版本环境变量的影响。rem 使用vs2005 x64编译环境,如果使用其他vs版本,只需修改这个运行环境"C:\Program Files (x86)\Microsoft Visual Studio 8\VC\bin\amd64\vcvarsamd64.bat"rem 生成win64/release静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32rmdir /S /Q tmp32perl Configure VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2005/lib/win64/releasems\do_win64a.batnmake -f ms\nt.mak installrem 运行测试程序cd out32..\ms\testcd ..rem 生成win64/release动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dllrmdir /S /Q tmp32dllperl Configure VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2005/dll/win64/releasems\do_win64a.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll..\ms\testcd ..rem 生成win64/debug静态库libnmake -f ms\nt.mak cleanrmdir /S /Q out32.dbgrmdir /S /Q tmp32.dbgperl Configure debug-VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2005/lib/win64/debugms\do_win64a.batnmake -f ms\nt.mak installrem 运行测试程序cd out32.dbg..\ms\testcd ..rem 生成win64/debug动态库dllnmake -f ms\ntdll.mak cleanrmdir /S /Q out32dll.dbgrmdir /S /Q tmp32dll.dbgperl Configure debug-VC-WIN64A --prefix=d:/install/openssl-1.0.2j/vs2005/dll/win64/debugms\do_win64a.batnmake -f ms\ntdll.mak installrem 运行测试程序cd out32dll.dbg..\ms\testcd ..rem vs2005 生成的8个版本96.9MBrem 通常我们只需要生成的win32/release win64/release版本。rem 其他版本只是调试使用

8 使用自己编译的OpenSSL库文件。

这里测试一个使用vs2015编译的32位动态库的D:\install\openssl-1.0.2j\vs2015\dll\win32\release版本。不管自己的工程是debug还是release版本,都引入openssl的release版本动态库。因为实际上我们自己的工程基本不会修改openssl代码。如果是自己研究,需要调试跟踪openssl的代码,需要引入openssl对应的debug版本。
新建一个vs2015空的32位控制台工程,并引入OpenSSL库文件。

8.1 新建一个vs2015空的32位控制台工程,工程上面右键菜单选择属性,配置属性C/C++附加包含目录,添加内容:D:\install\openssl-1.0.2j\vs2015\dll\win32\release\include
注意:实际工程中,需要把vs2015目录内容拷贝到自己工程的特定第三方目录,然后使用相对路径引入。
这里写图片描述

8.2 配置属性==>连接器==>常规==>附加库目录,添加D:\install\openssl-1.0.2j\vs2015\dll\win32\release\lib;
这里写图片描述

8.3 配置属性==>连接器==>输入==>附近依赖项,添加 libeay32.lib;ssleay32.lib;
这里写图片描述

8.4 添加一个测试的c++文件。这里在其他人的blog上面引入了一个测试文件。OpenSSLTest.cpp。来自http://blog.csdn.net/gpltoken/article/details/53011068。

// 该代码来自 http://blog.csdn.net/gpltoken/article/details/53011068// 把文件目录做了修改,解密后的文件多了一个换行符// #include <openssl/evp.h>#include <stdio.h>#pragma warning(disable:4996)#define N 1024#define IN//Aes算法ecb模式加密文件/**********************************************************************函数名称:AesEncryptFile函数功能:加密文件处理过程:1.根据选择的密码算法以及口令,生成key和iv。2.把文件头写入密文文件3.循环读取原文文件数据加密后保存到密文文件路径中。参数说明:szSrc:[IN] char *,待加密的原文文件路径szTarget:[IN] char *,加密后的密文文件保存路径key:[IN] unsigned char *, 口令iType:[IN] int, 加密类型(128或256)返回值:成功返回1,否则返回0************************************************************************/int AesEncryptFile(IN char * szSrc,    IN char * szTarget,    IN unsigned char * key,    IN int iType){    unsigned char ukey[EVP_MAX_KEY_LENGTH];    unsigned char iv[EVP_MAX_IV_LENGTH];    unsigned char in[N];    int inl;   //输入数据大小    unsigned char out[N];    int outl;   //输出数据大小    int isSuccess;    FILE *fpIn;    FILE *fpOut;    EVP_CIPHER_CTX ctx;   //evp加密上下文环境    const   EVP_CIPHER *cipher;    fpIn = fopen(szSrc, "rb");    if (fpIn == NULL)    {        printf("fopen szSrc failed");        return 0;    }    fpOut = fopen(szTarget, "w+");    if (fpOut == NULL)    {        printf("fopen szTarget failed");        fclose(fpIn);        return 0;    }    //选择算法    if (iType == 128)    {        cipher = EVP_aes_128_ecb();    }    else if (iType == 256)    {        cipher = EVP_aes_256_ecb();    }    else    {        printf("iType should be 128 or 256.");        fclose(fpIn);        fclose(fpOut);        return 0;    }    //生成ukey和iv    int len = sizeof(key);    EVP_BytesToKey(cipher, EVP_md5(), NULL, (const unsigned char *)key, len - 1, 1, ukey, iv);    //初始化ctx,加密算法初始化    EVP_CIPHER_CTX_init(&ctx);    isSuccess = EVP_EncryptInit_ex(&ctx, cipher, NULL, ukey, iv);    if (!isSuccess)    {        printf("EVP_EncryptInit_ex() failed");        EVP_CIPHER_CTX_cleanup(&ctx);        fclose(fpIn);        fclose(fpOut);        return 0;    }    //加密文件    for (;;)    {        inl = fread(in, 1, N, fpIn);        if (inl <= 0)            break;        isSuccess = EVP_EncryptUpdate(&ctx, out, &outl, in, inl);        if (!isSuccess)        {            printf("EVP_EncryptInit_ex() failed");            EVP_CIPHER_CTX_cleanup(&ctx);            fclose(fpIn);            fclose(fpOut);            return 0;        }        fwrite(out, 1, outl, fpOut);    }    isSuccess = EVP_EncryptFinal_ex(&ctx, out, &outl);    if (!isSuccess)    {        printf("EVP_EncryptInit_ex() failed");        EVP_CIPHER_CTX_cleanup(&ctx);        fclose(fpIn);        fclose(fpOut);        return 0;    }    fwrite(out, 1, outl, fpOut);    printf("加密成功\n");    EVP_CIPHER_CTX_cleanup(&ctx);    fclose(fpIn);    fclose(fpOut);    return 1;}//Aes算法ecb模式解密文件/**********************************************************************函数名称:AesDecryptFile函数功能:解密文件处理过程:1.根据选择的密码算法以及口令,生成key和iv。2.把文件头写入密文文件3.循环读取原文文件数据加密后保存到密文文件路径中。参数说明:szSrc:[IN] char *,待解密的密文文件路径szTarget:[IN] char *,解密后的解密文件保存路径key:[IN] unsigned char *, 口令iType:[IN] int, 加密类型(128或256)返回值:成功返回1,否则返回0************************************************************************/int AesDecryptFile(IN char * szSrc,    IN char * szTarget,    IN unsigned char * key,    IN int iType){    unsigned char ukey[EVP_MAX_KEY_LENGTH];    unsigned char iv[EVP_MAX_IV_LENGTH];    unsigned char in[N];    int inl;   //输入数据大小    unsigned char out[N];    int outl;   //输出数据大小    int isSuccess;    FILE *fpIn;    FILE *fpOut;    EVP_CIPHER_CTX ctx;   //evp加密上下文环境    const EVP_CIPHER *cipher;    fpIn = fopen(szSrc, "rb");    if (fpIn == NULL)    {        printf("fopen szSrc failed");        return 0;    }    fpOut = fopen(szTarget, "w+");    if (fpOut == NULL)    {        printf("fopen szTarget failed");        fclose(fpIn);        return 0;    }    //选择算法    if (iType == 128)    {        cipher = EVP_aes_128_ecb();    }    else if (iType == 256)    {        cipher = EVP_aes_256_ecb();    }    else    {        printf("iType should be 128 or 256.");        fclose(fpIn);        fclose(fpOut);        return 0;    }    //生成ukey和iv    int len = sizeof(key);    EVP_BytesToKey(cipher, EVP_md5(), NULL, (const unsigned char *)key, len - 1, 1, ukey, iv);    //初始化ctx,加密算法初始化    EVP_CIPHER_CTX_init(&ctx);    isSuccess = EVP_DecryptInit_ex(&ctx, cipher, NULL, ukey, iv);    if (!isSuccess)    {        printf("EVP_DecryptInit_ex() failed");        EVP_CIPHER_CTX_cleanup(&ctx);        fclose(fpIn);        fclose(fpOut);        return 0;    }    //加密文件    for (;;)    {        inl = fread(in, 1, N, fpIn);        if (inl <= 0)            break;        isSuccess = EVP_DecryptUpdate(&ctx, out, &outl, in, inl);        if (!isSuccess)        {            printf("EVP_EncryptInit_ex() failed");            EVP_CIPHER_CTX_cleanup(&ctx);            fclose(fpIn);            fclose(fpOut);            return 0;        }        fwrite(out, 1, outl, fpOut);    }    isSuccess = EVP_DecryptFinal_ex(&ctx, out, &outl);    if (!isSuccess)    {        printf("EVP_DecryptInit_ex() failed");        EVP_CIPHER_CTX_cleanup(&ctx);        fclose(fpIn);        fclose(fpOut);        return 0;    }    fwrite(out, 1, outl, fpOut);    printf("解密成功\n");    EVP_CIPHER_CTX_cleanup(&ctx);    fclose(fpIn);    fclose(fpOut);    return 1;}int main(){#if _DEBUG    char *Src = "../debug/test.txt";    char *TargetEnc = "../debug/test.txt.enc";    char *TargetDec = "../debug/test.txt.dec";#else    //// 如果调试也需要指定正确的目录    //char *Src = "../Release/test.txt";    //char *TargetEnc = "../Release/test.txt.enc";    //char *TargetDec = "../Release/test.txt.dec";    char *Src = "test.txt";    char *TargetEnc = "test.txt.enc";    char *TargetDec = "test.txt.dec";#endif    unsigned char key[32] = "abcdefg";    int rv = AesEncryptFile(Src, TargetEnc, key, 128);    if (rv != 1)    {        printf("AesEncryptFile() failed");        return 1;    }    rv = AesDecryptFile(TargetEnc, TargetDec, key, 128);    if (rv != 1)    {        printf("AesDecryptFile() failed");        return 1;    }    return 0;}

8.5 Build 项目,生成debug/OpenSSLTest.exe文件
这里写图片描述

8.6 把D:\install\openssl-1.0.2j\vs2015\dll\win32\release\bin目录下的libeay32.dll和ssleay32.dll拷贝到与 debug/OpenSSLTest.exe 相同的目录下。在debug/OpenSSLTest.exe 目录下,生成一个文本文件,text.txt,随便写些内容后,F5,运行调试OpenSSLTest.exe,生成test.txt的加密文件test.txt.enc和test.txt.enc的解密文件test.txt.dec。

这里写图片描述

09 关于运行时库的选中

openssl基本都会作为第三方库引入工程。而且往往会作为次级库引入,第三方库在编译使用的运行时库一般会是动态运行时,也有选择静态运行时库的。openssl的编译也面临同样问题。默认使用动态运行时库。通过修改配置项,可以选择静态运行时库。

09.01 运行时库默认选项

nmake -f ms/ntdll.mak

该命令生成动态库,默认使用的是MD

nmake -f ms/nt.mak

该命令生成静态库,默认使用的是MT

09.02 更改运行时库方法

想生成使用静态链接运行时库的动态库则采用下面方法
复制一个ntdll.mak并命名为ntdll_mt.mak,修改里面的 “CFLAG= /MD /Ox …………..” 为/MT ,然后重新编译,执行 nmake -f ms/ntdll_mt.mak
想生成使用动态链接运行时库的静态库则采用下面方法
复制一个nt.mak并命名为nt_md.mak,修改里面的 “CFLAG= /MT /Ox …………..” 为/MD ,然后重新编译 ,执行 nmake -f ms/nt_md.mak

0 0
原创粉丝点击