0x00前言
windows中安装openssl有两种方法:1)直接从http://slproweb.com/products/Win32OpenSSL.html下载已经编译好的安装包;2)使用VS编译源码进行安装。以下为第二种安装方法的具体步骤。
0x01安装openssl
1. 安装ActivePerl
从官网上http://www.activestate.com/activeperl下载与系统版本一致的安装包(32位或64位,32位版本只能生成32位版本的openssl库文件,64位版本可以选择生成32位或者64位版本的openssl库文件),这里选择32位版本。安装过程中选择配置环境变量。
测试是否安装成功:进入perl/eg,执行perl example.pl
,若显示Hello from ActivePerl!
,则说明安装成功。
2. 初始化VS编译环境
依次点击“开始”菜单 /Visual Studio 2010/Visual Studio Tools/Visual Studio 命令提示(2010)进入目录 Microsoft Visual Studio 10.0\VC\bin\ ,执行vcvars32.bat。
3. 配置openssl
从官网http://www.openssl.org/source/下载源码后解压,进入openssl目录中执行perl Configure VC-WIN32
。
4.执行ms\do_ms.bat
为了生成debug版本的库便于调试,需要修改do_ms.bat文件。修改后执行ms\do_ms.bat。
原文件:
perl util\mkfiles.pl >MINFO
perl util\mk1mf.pl no-asm VC-WIN32 >ms\nt.mak
perl util\mk1mf.pl dll no-asm VC-WIN32 >ms\ntdll.mak
if x%OSVERSION% == x goto skipce
perl util\mk1mf.pl no-asm VC-CE >ms\ce.mak
perl util\mk1mf.pl dll no-asm VC-CE >ms\cedll.mak
:skipce
perl util\mkdef.pl 32 libeay > ms\libeay32.def
perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
修改后的文件:
perl util\mkfiles.pl >MINFO
perl util\mk1mf.pl debug no-asm VC-WIN32 >ms\nt.mak #添加debug
perl util\mk1mf.pl debug dll no-asm VC-WIN32 >ms\ntdll.mak #添加debug
if x%OSVERSION% == x goto skipce
perl util\mk1mf.pl debug no-asm VC-CE >ms\ce.mak #添加debug
perl util\mk1mf.pl debug dll no-asm VC-CE >ms\cedll.mak #添加debug
:skipce
perl util\mkdef.pl 32 libeay > ms\libeay32.def
perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
5.编译openssl nmake -f ms\ntdll.mak
—–编译动态库 nmake -f ms\nt.mak
—–编译静态库
编译成功后,在openssl目录下会多出两个文件夹:
out32dll.dbg:存放动态库及相关文件,其中包含libeay32.dll、libeay32.lib和ssleay32.dll、ssleay32.lib。
out32.dbg:存放静态库及相关文件,其中包含libeay32.lib和ssleay32.lib。
ssleay32文件中包含与ssl协议相关的函数的实现,libeay32中包含与密码运算相关的函数的实现。
在VS项目中使用libeay32.dll和ssleay32.dll时,直接将这两文件放在exe程序所在目录下(如debug或release目录)。
注:
1)若出现nmake不是内部命令或外部命令,也不是可运行程序
错误,把nmake的安装目录(E:\Program Files\Microsoft Visual Studio 10.0\VC\bin)加入环境变量可解决。
2)若出现NMAKE : fatal error U1077: '"path\cl.exe"': return code '0xc0000135'
错误,进入 E:\Program Files\Microsoft Visual Studio 10.0\VC目录执行vcvarsall.bat可解决。
3)测试
nmake -f ms\nt.mak test
nmake -f ms\ntdll.mak test
测试结果如下则编译成功。
4)清除上次编译结果
nmake -f ms\ntdll.mak clean
nmake -f ms\nt.mak clean
5.配置openssl的环境变量
安装完openssl后,每次执行openssl命令时都需要切换到openssl.exe所在目录下,为此,添加openssl环境变量(E:\openssl-1.0.1m\out32dll.dbg)即可在任意目录下运行openssl。
如果在打开时候出现WARING:can't open config file:E:/openssl/ssl/openssl.cnf
,只需要找到openssl.cnf所在目录(E:\openssl\apps\openssl.cnf),然后执行set OPENSSL_CONF=E:\openssl\apps\openssl.cnf
即可解决。
0x02 VS中使用openssl编程
编译好openssl库之后即可使用这些库来编程,但需要对VS进行一些设置,VS2010中的设置如下:
1. 设置头文件与库函数所在目录
项目/ 属性/ VC++目录/ 包含目录,该项设置为openssl的头文件目录(openssl/inc32)。
项目/ 属性/ VC++目录/ 库目录,该项设置为openssl的编译生成的lib、dll所在的目录(openssl/ out32dll.dbg)。
2. 设置附加依赖项
项目/ 属性/ 连接器/输入/ 附加依赖项,添加libeay32.lib与ssleay32.lib两项。
3. 设置附加包含目录
项目/ 属性/ C/C++/ 常规/ 附加包含目录,该项设置为openssl的头文件目录(openssl/inc32)。
0x03 VS中调试openssl源码
因为openssl的编译是通过Makefile的方式,不是建了一个VS的solution,所以不能很方便地加断点进行debug。但是VS的断点原理很简单,就是插入一条软件中断的汇编,于是我们也效仿之。
在想要调试的地方,插入以下汇编指令。
__asm int 3
然后重新编译源码,运行程序就能debug了。
References:
http://blog.csdn.net/houjixin/article/details/25806151
http://blog.csdn.net/henter/article/details/8364532
http://ourlove11.blog.163.com/blog/static/21266600520129217234263/
http://www.cnblogs.com/liping13599168/archive/2011/03/16/1986024.html