当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

小型CA系统[VC/C++编程]

赞助商链接



  本文“小型CA系统[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

前些天在网上看到了一些关于OPENSSL的介绍,认为很有意思,于是做了一个程序,基本实现了数字证书的制作、SSL安全通讯、加解密操作等功效,秉持OPENSSL开放的原则,拿出来同享,主要实现写在了两个DLL中.水平有限,请勿见笑.

首先感激中国OPENSSL论坛(http://www.openssl.cn/)的几位斑竹,感激他们的勤劳奋动和默默付出.

程序是在一个电子钥匙管理程序的底子上作的,本来电子钥匙的部份还保存着,需求电子钥匙的支持.

代码较多,笔者只介绍认为重要的三点.

程序要点:

(1)RA客户端与服务器程序采取了ACCESS数据库,SSL衔接、非阻塞套接字,基本原理是客户端发送号令恳求,服务器查询数据库,然后查询后果发给客户端.非阻塞套接字是很机动的,应用不当会事倍功半,这个程序而言:AsyncSelect函数是个关键.

林军鼐的Winsock编程宝典中这样写道:

【FD_WRITE 事件】

系统会告诉我们 FD_WRITE 事件的讯息,只有下列几种情形:

(1)呼唤 WSAAsyncSelect() 来设定 FD_WRITE 事件时,Socket 已经可以传送资料(TCP scoket 已经和对方衔接成功了,或 UDP socket 已成立完成),且目前 output buffer 仍有空间可写入资料.

(2)呼唤 WSAAsyncSelect() 来设定 FD_WRITE 事件时,Socket 尚不能传送资料,不过一旦 Socket 与对方衔接成功,即刻就会收到 FD_WRITE 的告诉.

(3)呼唤 send() 或 sendto() 传送资料时,系统奉告错误,且错误码为10035 WSAEWOULDBLOCK (呼唤 WSAGetLastError() 得知这项错误),这时表示 output buffer 已经满了,无法再写入任何资料(此时即令呼唤再多次的 send() 也都一定失利);一旦系统将部份资料成功送抵对方,空出 output buffer 後,便会送一个 FD_WRITE 给利用者,奉告可持续传送资料了.换句话说,读者在呼唤 send() 传送资料时,只要不是返回错误 10035 的话,便可一向持续呼唤 send() 来传送资料;一旦 send() 回返错误 10035,那麽便不要再呼唤 send() 传送资料,而须等收到 FD_WRITE 後,再持续传送资料.

【FD_READ 事件】

我们会收到 FD_READ 事件告诉我们去读取资料的情形有 :

(1)呼唤 WSAAsyncSelect 函式来对此 Socket 设定 FD_READ 事件时,input buffer 中已有资料.

(2)原先系统的 input buffer 是空的,当系统再收到资料时,会告诉我们.

(3)利用者呼唤 recv 或 recvfrom 函式,从 input buffer 读取资料,但是并没有一次将资料读光,此时会再驱动一个 FD_READ 事件,表示仍有资料在 input buffer 中.

读者必须注意:假如我们收到 FD_READ 事件告诉的讯息,但是我们成心不呼唤 recv 或 recvfrom 来读取资料的话,尔後系统又收到资料时,并不会再次告诉我们,一定要等我们呼唤了 recv 或 recvfrom 後,才有大概再收到FD_READ 的事件告诉.(林军鼐)

(2)因为有些基本操作写在动态库中,动态库中长时间操作(加解密)的进展情形,应当在主程序中表现出来,这样对比友好.本程序采取了回调函数机制办理这个问题.

static void DrawProg(int i);

void CUsbEvpPage::DrawProg(int i)

{

((CUsbEvpPage *)((CPropertySheet *)AfxGetMainWnd())->GetPage(8))->

m_Progress.SetPos(i);//没有引入this,因为这个函数在动态库中调用.

}

动态库在一定条件下调用了这个函数,指导了操作的进度.

(3)程序做完了,假如用一些诸如SMARTCHK的工具查抄一下,说不定会有收获.

程序BUG:

1、不能再同一个程序顶用SSL客户端衔接SSL服务器,不然……

2、由于对OPENSSL掌握的有限,部份代码存在内存泄露.

3、SSL客户端衔接SSL服务器,显示乱码是因为没有处理半个汉字;假如用IE衔接就没有这个问题.

因为程序代码较多,不再一一介绍,具体实现请参看源代码.代码中存在的错误请指出,以便在下一个版本中改正.

一些头文件和lib采取了绝对途径,需求重新配置.

CA和EVP动态库的源代码问题还很多,因此没有公布,待完善了再拿出来献丑.

关于数字证书和SSL的利用,可以在网络上找一些介绍,这里不再赘述.

程序在win2000 + vc6+ACCESS2000下面测试过.若有问题与我接洽.

本文配套源码


  以上是“小型CA系统[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 关于小型CA系统的若干阐明和DLL源码
  • 小型CA系统
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .