使用MS SSPI实现安全SSL / TLS客户端的可编译C ++代码

时间:2010-01-09 02:05:20

标签: c++ ssl sspi

如此处所述 http://www.ddj.com/cpp/184401688

我没有时间从头开始写这篇文章。

被问及没有回答 https://stackoverflow.com/questions/434961/implementing-ssl

问题是:

我正在寻找一些可实现MS SSPI的可编译的工作源代码(如上面的线程中所提到的),程序性而不是OOP首选。

我在这里查看了代码项目示例:

http://www.codeproject.com/KB/IP/sslclasses.aspx

但这是C#OOP。将其转换为C ++代码并非易事。

OpenSSL的

SChannel调用遵循GSS API标准。当然,还有一些替代方案 - 例如OpenSSL。这个包是一个完整而彻底的协议实现,对于熟悉UNIX的人来说无疑是最好的选择。该软件包最初针对UNIX社区,并且编译它依赖于Perl运行时,因此从未使用过UNIX类型系统的Windows开发人员需要一些学习曲线。

除此之外,OpenSLL做了一些非标准的事情

尼古拉 已经包含了很多可编译的源代码  (www.coastrd.com) 我希望找到愿意这样做的人。

4 个答案:

答案 0 :(得分:23)

此SSPI SChannel SMTPS示例应该按原样在Visual Studio 2008中编译和运行

http://www.coastrd.com/c-schannel-smtp

SChannel是包含SSL / TLS协议的GSS API的Microsoft实现。

利用SChannel的优势:

  • SSPI屏蔽了开发人员的详细信息。
  • 运行最终应用程序无需额外设置:
  • SChannel是操作系统不可或缺的一部分
  • 在Windows ME / 2000 / XP / ...平台上,默认安装并配置了SChannel
  • SChannel调用遵循GSS API标准。
  • 您无需创建/安装任何证书
  • 没有第三方dll(1MB或更大)发货和安装

代码应生成如下所示的会话:

----- SSPI初始化
----- WinSock初始化
-----证书初始化
-----连接到服务器
发送的70字节握手数据
收到974字节的握手数据
发送的182字节握手数据
收到43字节的握手数据
握手成功了 -----进行客户握手
-----服务器凭证认证

服务器主题:C = US,S =加州,L =山景,O = Google Inc,CN = smtp.gmail.com
服务器发行者:C = ZA,S =西开普省,L =开普敦,O = Thawte Consulting cc,OU =认证服务部门,CN = Thawte Premium Server CA,E = premium-server @ thawte.com

-----证书链显示
-----服务器证书已验证
-----发布服务器证书上下文

协议:TLS1
密码:RC4
密码强度:128
哈希:MD5
哈希强度:128
密钥交换:RSA
密钥交换强度:1024
-----安全连接信息
收到64字节(加密)的应用程序数据
解密数据:43字节
220 mx.google.com ESMTP 6sm17740567yxg.66

发送7个字节的明文:
EHLO

发送的28字节加密数据
收到169字节(加密)的应用程序数据
解密数据:148字节
250-mx.google.com为您服务,[22.33.111.222]
250-SIZE 35651584
250-8BITMIME
250-AUTH LOGIN PLAIN
250 ENHANCEDSTATUSCODES
250 PIPELINING

发送7个字节的明文:
退出

发送的28字节加密数据
收到69字节(加密)的应用程序数据
解密数据:48字节
221 2.0.0关闭连接6sm17740567yxg.66

----- SMTP会话完成
发送关闭通知
发送了23个字节的握手数据
-----与服务器断开连接
-----开始清理
-----全部完成-----

答案 1 :(得分:5)

在我之后重复:“我想使用OpenSSL”。

这个问题太严重了,而且每次想要解决问题时都很容易搞砸。如果您遇到OpenSSL问题,请尝试通过OpenSSL的对话和补丁来解决这个问题。

(没有人可以免于搞砸,甚至微软,或者甚至是OpenSSL。请使用可以查看的内容,以及在出现问题时修补的内容。使用OpenSSL。)

答案 2 :(得分:5)

也许this link是一个很好的起点。它包含使用MS SSPI的实际工作示例代码(虽然它看起来非常具有MSVC,但确定,它的窗口无论如何)。只需忽略OpenSSL示例; - )

答案 3 :(得分:0)

您为此类可编辑的工作源代码支付多少费用?或者你有没有想到有人会把它给你? OpenSSL的人已经做到了。这是丑陋的,但价格合适。