vs2005编译Openssl

Openssl是ssl和tls的开源的免费的实现库。那ssl和tls又是什么呢?

ssl=secure socket layer                      安全套接字层

tls=transport layers security               传输层安全

我们的https是怎么来的呢?其实

https = http + ssl

要使用openssl,就要编译它。当然如果你不想自己编译,只想去拿来使用,你也有的选择,给你一个连接,这个连接有人家安装好的库:

http://slproweb.com/products/Win32OpenSSL.html

这个也是openssl官网推荐的下载连接,所以你不用担心它是否有病毒。

其实openssl的工程中包含了怎么编译openssl工程文档,例如关于如何在win32编译,可以参考其中的INSTALL.W32,但是我发现这个文档有个错误,请参看后面的部分。

好了,我们还是自己编译吧。

一 去官网下载openssl工程

官网是

http://www.openssl.org

工程下载地址:

http://www.openssl.org/source/

最新版本:

openssl-1.0.1c.tar.gz 

二  解压

三  安装perl

如果你没有安装perl,从下列网站下载,安装:

http://www.activestate.com/activeperl/downloads

四  启动visual studio 2005 command prompt

visual studio 2005 command prompt在开始菜单 -> 程序 -> visual studio 2005 ->visual studio tools

五 配置

下面的命令全部在visual studio 2005 command prompt中执行。

执行:

>perl configure VC-WIN32

注意这里是大写,不要写成小写。否则会出现警告。

另外有些教程,以及openssl工程中INSTALL.W32中提到可以加上–prefix,也就是

>perl configure VC-WIN32 –prefix=c:/openssl/dir

但是,我发现如果加上这个,后面编译就出现包含文件的错误。

六 生成Makefile

执行:

msdo_ms

除了使用do_ms还可以使用下面这2个命令:

msdo_nasm              这个是说明使用nasm来处理汇编部分

msdo_masm            这个是说明使用masm来处理汇编部分

七 编译

nmake -f msntdll.mak

编译完成之后,可以到out32dll这个文件夹看看,是不是生成一堆的dll和exe文件,在你新解压的openssl文件夹下是没有这个文件的。

测试OpenSSL动态库:nmake -f msntdll.mak test
测试OpenSSL静态库:nmake -f msnt.mak test
安装OpenSSL动态库:nmake -f msntdll.mak install
安装OpenSSL静态库:nmake -f msnt.mak install
清除上次OpenSSL动态库的编译,以便重新编译:nmake -f msntdll.mak clean
清除上次OpenSSL静态库的编译,以便重新编译:nmake -f msnt.mak clean

如何使用呢?

在openssl文件下面有inc32文件夹,这个就是头文件,注意不是include,刚开始我也以为是include文件夹,结果编译时候出错了,结果打开的这些文件,里面只是一些奇怪的字符而已。lib和dll文件是在我们刚才提到的out32dll文件夹中。

接下来,我们使用vs2005创建一个控制台空工程,添加一个main.cpp文件,输入下面内容:

#include <iostream>

extern "C"
{
#include "./include/openssl/bio.h"
#include "./include/openssl/ssl.h"
}

#pragma comment( lib, "./lib/libeay32.lib")
#pragma comment( lib, "./lib/ssleay32.lib")

using namespace std;

int main( int argc, char** argv )
{
    BIO*    pBio;
    pBio = BIO_new_connect("www.google.com:80");
    if(pBio == NULL)
    {
        cout<<"Failed!"<<endl;
        return -1;
    }

    if(BIO_do_connect(pBio) <= 0)
    {
        cout<<"Connection Failed!"<<endl;
    }
    else
    {
        cout<<"Connection Successful!"<<endl;
    }

    return 0;
}

记得拷贝libeay32.dll和ssleay32.dll到debug后者release目录下,执行程序。

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

Leave a Reply

Your email address will not be published. Required fields are marked *