Chinaunix首页 | 论坛 | 博客
  • 博客访问: 365333
  • 博文数量: 19
  • 博客积分: 1450
  • 博客等级: 上尉
  • 技术积分: 262
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-17 23:23
个人简介

右手代碼,左手《史記》

文章分类
文章存档

2019年(1)

2014年(5)

2013年(2)

2011年(1)

2010年(6)

2009年(4)

我的朋友

分类: C/C++

2011-11-30 21:34:01

OpenSSL win32下编译与简单编程(xp sp3)

一.实验目的

1.熟悉OpenSSL工具包环境的编程

2.编程实现一个简单的OpenSSL程序

.实验步骤

1.阅读OpenSSL自带文档

2.编译OpenSSL源代码

3.配置OpenSSL编程环境

4.编写OpenSSL程序

5.调试程序

.实验过程

3.1编译OpenSSL源码

       3.1.1工具包源码,解压缩源码。(或者直接应用教员提供的源码)


       3.1.2安装perl。用perl配置解释配置文件,命令如下

> perl Configure VC-WIN32 -DOPENSSL_USE_IPV6=0 --prefix=c:\openssl

       其中--prefix=c:\openssl指明编译成功的库文件和可执行文件的存放路径。
    一定要加上-DOPENSSL_USE_IPV6=0选项,不然会出现NMAKE : fatal error U1077: 'cl' : return code '0x2'的错误


3.1.3运行do_ms.bat配置windows下编译环境,命令如下

 

> ms\do_ms.bat


3.1.4编译源码(编译为动态链接库),命令如下
   修改:去掉ntdll.mak、nt.mak文件中/debug选项,不然引用库编程时可能会出现【fatal error LNK1103: debugging information corrupt; recompile module】的错误

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


最后可能会出现“NMAKE:fatal error U1077:'ml':return error code '0x1'.stop.”的错误,由于没有找到ml.exe的汇编连接器,下载并放到当前目录即可。
     3.1.5
安装库文件和二进制文件,命令如下

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


       命令运行成功后会在刚刚设置的—prefix所指向的路径中出现如下目录和文件


3.2配置VC++6.0编译器开发环境

       3.2.1 依次进入“工具”—>“选项”


       3.2.2在“目录”选项卡中将include fileslibrary files都设置成刚刚—prefix所指路径下的includelib目录


       3.2.3在自己编写的程序中加入所需的头文件,并且关联相应的库文件


       3.2.4 依次打开“工程”-->“设置”,切换至“调试”选项卡,在下拉菜单选择“附加的DLLs”将—prefix所指目录中bin目录下的dll文件加入进去。


也可以直接将两个dll文件复制到自己编写程序的源码目录下。


3.3编写自己的openSSL程序(在openssl-0.9.8o\demos\ssl源码的基础上进行修改)

       3.3.1 修改私钥及自签名证书的路径,windows下必须是全路径


3.3.2 制作私钥。切换至编译号的openssl.exe所在的路径,利用如下命令生成私钥文件

openssl.exe genrsa -out privatekey.pem 2048


3.3.3 制作自签名证书。切换至编译号的openssl.exe所在的路径,利用如下命令生成自签名证书

openssl.exe req -new -x509 -key privatekey.pem -out cacert.pem -days 1095


       这时,会提示找不到openSSL配置文件,将./openssl.cnf文件复制入./ssl/,再次进行生成自签名证书。


       填写相关信息


自签名证书私钥生成成功!


 

3.4 openSSL程序测试

       3.4.1 首先运行服务器ssl_serv.exe,之后运行客户端ssl_cli.exe



       可以看到,二者进行了简单的通信。

       3.4.2 利用wireshark截取二者通信的数据包,经过查看,并未有明文传送信息,证明通信过程加密成功

阅读(7590) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~