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

Mik*_*der 7 c++ ssl sspi

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

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

问及未回答 /sf/ask/30447301/

问题是:

我正在寻找一些可实现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),我希望找到愿意做同样事情的人.

Mik*_*der 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个字节的明文:
QUIT

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

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


Nic*_*tin 5

在我之后重复:"我想使用OpenSSL ".

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

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

  • 呃不,谢谢. (3认同)
  • 如果你是粘在windows上的,那么你肯定必须拥有MSDN帐户和/或开发合同.如果是这样,似乎这正是我们向微软支付的问题. (3认同)

Fru*_*nsi 5

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