详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

时间:2022-06-16 04:36:26

一、Windows系统安装OpenSSL

1、  环境:

操作系统:Windows7(32位)64位没有测试,不保证本方法可以成功

VC:VC 6.0(其他VC环境也大同小异,只不过路径有所不同)

2、  实验前准备

2.1 下载

下载OpenSSL地址:

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

版本openssl-0.9.8e,注意版本号,开始笔者使用openssl-1.0.1c的版本号(比较新的版本),本方法不能成功安装。

下载ActivePerl地址

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

版本号5.16.3.(最新的即可)

下载MASM32地址(因为VC的Bin下需要一个ml.exe文件,下载安装好MASM32,将ml.exe拷贝到Bin目录下即可)

http://www.masm32.com/

最新版即可

2.2  VC环境安装

       在此不做详述

3、安装

3.1 安装ActivePerl(安装得到一个per脚本解释器,因为编译OpenSSL需使用)

(1)点击安装包即可,如下图

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

(2)测试

在安装完后,可以进入命令行模式,进入perl安装目录下,

执行“perlexample.pl”

若显示“Hellofrom ActivePerl!”,则说明Perl安装成功,说明可以使用Perl的相关命令来进行OpenSSL的安装了

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

3.2 安装OpenSSL

(1)首先初始化VC++6.0的环境变量

切换到VC98的Bin目录下,输入VCVARS32.BAT,显示如下

(注: VCVARS32.bat是注册环境变量,运行后VC才能找到编译所需要的库)

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

(2)配置编译参数

切换到openssl-0.9.8e目录下(即解压openssl-0.9.8e软件包,得到的文件)

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

执行perl Configure VC-WIN32 --prefix=c:/openssl-0.9.8e  显示如下:

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

(3)ms\do_ms

继续在命令行执行ms\do_ms,截图如下:

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

显示如下:

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

(3)编译动态链接库

命令行下执行命令(在openssl-0.9.8e目录下):nmake -f ms\ntdll.mak 

显示如下:

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

如果编译成功, 输出在out32dll目录下,包括可执行文件、两个dll和两个lib文件:

libeay32.dll, libeay32.lib, ssleay32.dll,ssleay32.lib

(4)测试

    使用命令“nmake -f ms\ntdll.mak test”,显示如下:

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

说明安装成功,OpenSSL在Windows环境下编译成功。

注:

编译分为两种情况,分为动态库和静态库,我用的方法是动态编译。

(1)   编译动态库:nmake -f ms\ntdll.mak

编译成功文件夹out32dll里输出的文件包括:应用程序的exe文件、lib文件、dll文件

(2)   编译静态库:nmake -f ms\nt.mak

编译成功文件夹out32dll里输出的文件包括:应用程序的exe文件、lib文件

其他命令:

测试OpenSSL动态库:nmake -f ms\ntdll.mak test

测试OpenSSL静态库:nmake -f ms\nt.mak test

安装OpenSSL动态库:nmake -f ms\ntdll.mak install

安装OpenSSL静态库:nmake -f ms\nt.mak install

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

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

(5)安装编译后的OpenSSL到制定目录

命令行下执行命令:nmake -fms\ntdll.mak install

安装编译后的OpenSSL到指定目录。

4、编译遇到的问题以及解决方法

4.1  nmake不是内部或者外部号令或者.bat文件

  两种解决办法:

(1)nmake.exe的文件位于C:\ProgramFiles\Microsoft Visual Studio\VC98\Bin目次中,设备景象变量即可。

右键单击我的电脑-->属性-->高等-->环境变量--高级变量(找到path)-->编辑,将C:\Program Files\Microsoft Visual Studio\VC98\Bin加到未尾,重启cmd,新的path才会生效

    (2)重新在VC98\Bin目录下执行VCVARS32.BAT,重新设置环境变量

4.2  执行nmake -f ms\ntdll.mak,报错

 fatal error C1083: Cannotopen include file: ""windows.h"": No such file or directoryNMAKE : fatal error U1077: ""cl"" : return code""0 x2"" Stop.的错误”

 解决办法:

先运行vcvars32,vcvars32.bat用于设置VC号令行编译的环境变量。 再次运行“nmake -fms\ntdll.mak”

4. 3执行nmake -fms\ntdll.mak,提示ml不是可识别的指令

         解决方法:

下载安装好MASM32,将ml.exe拷贝到Bin目录下即可。

二、VC环境下编写一个简单OpenSSL程序

1. 配置VC环境

  这里主要是将生成的OpenSSL有关库文件的路径添加到VC中。

在VC++ 6.0的工具—>选项—>目录下

Include files下添加OpenSSL安装目录下的include目录;

在Libraryfiles下添加out32dll目录

截图分别如下:

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

2. 编写OpenSSL程序

   以一个大数乘法为例:

   编写代码如下,同时libeay32.libssleay32.lib(编译成功后在out32dll文件夹中生成)拷贝到程序所在目录下即可

#include <openssl/bn.h>

#include <string.h>

#include <openssl/bio.h>

//注意添加这两行,因为用到了这两个库中的函数,可能包含了它的头文件(声明部分),实现部分在这个lib文件中,这个就是告诉编译器链接这个lib文件(不然找不到函数的实现)

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

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

 

int main()

{

       BIGNUM *a,*b,*add;

       BIO *out;

       char c[20],d[20];

       int ret;

       a=BN_new();

       strcpy(c,"32");

       ret=BN_hex2bn(&a,c);

       b=BN_new();

       strcpy(d,"100");

       ret=BN_hex2bn(&b,d);

       out=BIO_new(BIO_s_file());

       ret=BIO_set_fp(out,stdout,BIO_NOCLOSE);

       add=BN_new();

       ret=BN_add(add,a,b);

       if(ret!=1)

       {

              printf("err.\n");

              return -1;

       }

       BIO_puts(out,"bn 0x32 + 0x100 = 0x");

       BN_print(out,add);

       BIO_puts(out,"\n");

       BN_free(a);

       BN_free(b);

       BN_free(add);

       BIO_free(out);

       return 0;

}

运行会报错如下:

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

解决方法:

(1)      头文件加入 #include "applink.c"

(2)      在VC++ 6.0的工具—>选项—>目录下Include files下添加一条新的路径,即下方蓝色区域,该路径包含上述头文件。

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

再次运行,成功,显示如下:

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序