VC环境OpenSSL安装以及编程过程

来源:互联网 发布:linux jvm内存设置 编辑:程序博客网 时间:2024/06/04 00:52

VC环境OpenSSL安装以及编程过程

 

SSL就是Secure Sockets Layer,是一种安全套接字协议。


配置过程中需要生成一些mak文件,这些生成代码用perl脚本生成,所以要安装一个ActivePerl

 

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

 

openss:http://www.openssl.org/ (本文使用openssl-1.0.0-beta5) 

 

 

参考 openssl 目录下的 install.win32 说明进行安装:

1 、进入解压目录。

>cd C:/ openssl-1.0.0-beta5

2 、运行 Configure 。

>perl Configure VC-WIN32

如不成功会有明显提示。

3 、创建 Makefile 文件。

>ms/do_ms

推荐使用这种方式,另外两种方式 如果使用也必须保证本机有编译器才能使用。

:ms/do_masm (默认 vc 自带的编译器;也也以自己下载安装)

:ms/do_nasm (需要自己下载)

4 、配置 VC 环境变量。

>cd C:/Program Files/Microsoft Visual Studio/VC98/Bin

    >vcvars32.bat

5 、编译动态链接库。

>cd C:/openssl-0.9.8k

>nmake -f ms/ntdll.mak

如果编译成功,最后的输出都在 out32dll 目录下:包括可执行文件、两个 dll ( ssleay32.lib, libeay32.lib )和两个 lib 文件( ssleay32.dll, libeay32.dll )。

6 、为 VC 添加头文件和静态链接库路径。

Tools à Options à Directores ,在 Include files 中增加 C:/openssl-0.9.8k /inc32 目录;在 Libray files 中增加 C:/openssl-0.9.8k/out32dll 。

7 、编写 OpenSSL 程序,可参考 C:/openssl-0.9.8k/demos

( 1 )包含相应头文件

#include <openssl/***. h >

(2) 添加静态链接库

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

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

或 Project à Settings à Link à Object/library modules 填写 libeay32.lib ssleay32.lib 。

( 3 )将动态链接库ssleay32.dll, libeay32.dll 复制到 C:/WINDOWS/system32 或 Debug 目录下,确保动态链接库在正确的路径。



+++++++++++++ 一些安装出错的处理++++++++++++++++

如何在Windows下编译OpenSSL (VS2010使用VC10的cl编译器)
1、安装ActivePerl//初始化的时候,需要用到perl解释器
2、使用VS2010下的Visual Studio 2010 Command Prompt进入控制台模式(这个模式会自动设置各种环境变量)
3、解压缩openssl的包,进入openssl的目录
4、perl configure VC-WIN32
尽量在这个目录下执行该命令,否则找不到Configure文件,或者指定完整的Configure文件路径。
5、ms\do_ms.bat
在解压目录下执行ms\do_ms.bat命令
6、nmake -f ms\ntdll.mak

7、nmake -f ms\nt.mak


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

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

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



上面的方法编译旧的版本是没有问题的,当时在编译最新的版本可能会报错:

 Assembling: tmp32\sha1-586.asm
tmp32\sha1-586.asm(1427) : error A2070: invalid instruction operands
tmp32\sha1-586.asm(1571) : error A2070: invalid instruction operands
NMAKE : fatal error U1077: 'ml' return code '0x1'
Stop.


解决:

把第4步改为 perl Configure VC-WIN32 no-asm 然后继续5,6,7步

然后又会报下面类似的连接错误:

提示错误:cryptlib.obj : error LNK2001: unresolved external symbol _OPENSSL_ia32_cpuid

out32dll/libeay32.dll : fatal error LNK1120: 1 unresolved externals

修改ms/do_ms.bat 为:

perl util/mkfiles.pl >MINFO
perl util/mk1mf.pl debug no-asm VC-WIN32 >ms/nt.mak
perl util/mk1mf.pl debug dll no-asm VC-WIN32 >ms/ntdll.mak
perl util/mk1mf.pl debug no-asm VC-CE >ms/ce.mak
perl util/mk1mf.pl debug dll no-asm VC-CE >ms/cedll.mak
perl util/mkdef.pl 32 libeay > ms/libeay32.def
perl util/mkdef.pl 32 ssleay > ms/ssleay32.def




编译后
在openssl解压目录下执行,完成编译后。输出的文件在out32dll (6), out32 (7)里面,包括应用程序的可执行文件、lib文件和dll文件

注意:在运行第五步时,cl编译器会抱怨说.\crypto\des\enc_read.c文件的read是The POSIX name for this item is deprecated(不被推荐的),建议使用_read。呵呵,我可不想将OpenSSL中的所有的read函数修改为_read。再看cl的错误代码error C2220,于是上MSDN上查找:
warning treated as error - no object file generated
/WX tells the compiler to treat all warnings as errors. Since an error occurred, no object or executable file was generated.
是由于设置了/WX选项,将所有的警告都作为错误对待,所以。。。

于是打开OpenSSL目录下的MS目录下的ntdll.mak文件,将CFLAG的/WX选项去掉,存盘。。。
继续执行nmake -f ms\ntdll.mak

如何在Windows下编译OpenSSL (VS2010使用VC10的cl编译器)
1、安装ActivePerl//初始化的时候,需要用到perl解释器
2、使用VS2010下的Visual Studio 2010 Command Prompt进入控制台模式(这个模式会自动设置各种环境变量)
3、解压缩openssl的包,进入openssl的目录
4、perl configure VC-WIN32
尽量在这个目录下执行该命令,否则找不到Configure文件,或者指定完整的Configure文件路径。
5、ms\do_ms.bat
在解压目录下执行ms\do_ms.bat命令
6、nmake -f ms\ntdll.mak
7、nmake -f ms\nt.mak

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


上面的方法编译旧的版本是没有问题的,当时在编译最新的版本可能会报错:

Assembling: tmp32\sha1-586.asm

tmp32\sha1-586.asm(1427) : error A2070: invalid instruction operands

tmp32\sha1-586.asm(1571) : error A2070: invalid instruction operands

NMAKE : fatal error U1077: 'ml' : return code '0x1'

Stop.

解决:
把第4步改为 perl Configure VC-WIN32 no-asm 然后继续5,6,7步
然后又会报下面类似的连接错误:
提示错误:cryptlib.obj : error LNK2001: unresolved external symbol _OPENSSL_ia32_cpuid
out32dll/libeay32.dll : fatal error LNK1120: 1 unresolved externals
修改ms/do_ms.bat 为:
perl util/mkfiles.pl >MINFO
perl util/mk1mf.pl debug no-asm VC-WIN32 >ms/nt.mak
perl util/mk1mf.pl debug dll no-asm VC-WIN32 >ms/ntdll.mak
perl util/mk1mf.pl debug no-asm VC-CE >ms/ce.mak
perl util/mk1mf.pl debug dll no-asm VC-CE >ms/cedll.mak
perl util/mkdef.pl 32 libeay > ms/libeay32.def
perl util/mkdef.pl 32 ssleay > ms/ssleay32.def



编译后
在openssl解压目录下执行,完成编译后。输出的文件在out32dll (6), out32 (7)里面,包括应用程序的可执行文件、lib文件和dll文件

注意:在运行第五步时,cl编译器会抱怨说.\crypto\des\enc_read.c文件的read是The POSIX name for this item is deprecated(不被推荐的),建议使用_read。呵呵,我可不想将OpenSSL中的所有的read函数修改为_read。再看cl的错误代码error C2220,于是上MSDN上查找:
warning treated as error - no object file generated
/WX tells the compiler to treat all warnings as errors. Since an error occurred, no object or executable file was generated.
是由于设置了/WX选项,将所有的警告都作为错误对待,所以。。。

于是打开OpenSSL目录下的MS目录下的ntdll.mak文件,将CFLAG的/WX选项去掉,存盘。。。
继续执行nmake -f ms\ntdll.mak


++++++++++++++++++++++++++++++




*****************VC6 不用安装配置 openssl***************

做软件开发的人, 基本都应该听说过大名鼎鼎的开源软件openssl, 下面, 我们来入门openssl编程吧。 初学者如果想了解openssl编程, 最不喜欢是生气: 还没有懂怎么利用openssl是怎么个玩法, 就不得不学openssl本身的编译。 在本文中, 我直接省略如何编译openssl这个过程, 直接把编译的最后结果(库和头文件)提供给大家, 希望大家能用得上。先用openssl来玩一下, 感觉有趣的话, 再去学学openssl的编译。


       下面来进行详细的介绍, 介绍openssl的使用(而不是openssl的库的编译):

        1. 首先在我的博客资源中下载Win32OpenSSL-1_0_1.rar, 然后解压得到Win32OpenSSL-1_0_1.exe, 对了, 我马上就上传到我的csdn资源中, 免费提供, 不需要积分哈, 不要害怕, 动起来。

        2. 安装Win32OpenSSL-1_0_1.exe, 主要是为了得到编译好的openssl库和头文件。 安装后, 在安装目录中有OpenSSL-Win32这个文件夹, 我是直接安装在C盘里面的, 所以其目录是:C:\OpenSSL-Win32,  在这个C:\OpenSSL-Win32目录下, 有很多openssl的库和头文件, 截图给大家看看, 方便大家核对:


        

        3. 在VC++6.0中建立代码文件main.cpp(这个过程我就不讲了), 随后要记得增加对C:\OpenSSL-Win32目录下的库和头文件的索引, 方法是, 选择菜单栏中的"Tools", 然后选择“Options...”, 然后添加索引, 如图:



        好了, 至此为止, VC++就增加了对openssl的索引, 前戏已经搞完, 可以开始做正事了。


     4. man.cpp中的C++代码为:

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. #include <iostream>  
  2. #include <openssl/md5.h> // 如果你直接拷贝我的程序运行, 那注定找不到md5.h  
  3. #pragma comment(lib, "libeay32.lib")  
  4. #pragma comment(lib, "ssleay32.lib")  // 在本程序中, 可以注释掉这句  
  5. using namespace std;  
  6.   
  7. int main()  
  8. {  
  9.     const char *data = "hello world";   // 原始数据  
  10.     unsigned char md[16] = {0};  
  11.   
  12.     MD5_CTX ctx;  
  13.     MD5_Init(&ctx);  
  14.     MD5_Update(&ctx, data, strlen(data));  
  15.     MD5_Final(md, &ctx);  
  16.       
  17.     int i = 0;  
  18.     char buf[33] = {0};  
  19.     char tmp[3] = {0};  
  20.     for(i = 0; i < 16; i++ )  
  21.     {  
  22.         sprintf(tmp,"%02X", md[i]);  
  23.         strcat(buf, tmp);  
  24.     }  
  25.   
  26.     cout << buf << endl;  // data的md5值  
  27.   
  28.     return 0;  
  29. }  

openssl编程注意事项:

http://blog.csdn.NET/fyang2007/article/details/6180394


原创粉丝点击