6

如此处所述 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 做了一些非常不标准的事情

Nikolai,贡献了很多可编译的源代码 (www.coastrd.com) 我希望能找到愿意做同样事情的人。

4

4 回答 4

23

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

http://www.coastrd.com/c-schannel-smtp (原来的网站似乎已经死了;幸运的是 WaybackMachine 已将其存档)

SChannel 是封装 SSL/TLS 协议的 GSS API 的 Microsoft 实现。

利用 SChannel 的优势:

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

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

----- SSPI Initialized
----- WinSock Initialized
----- Credentials Initialized
----- 连接到服务器
70 字节握手数据发送
974 字节握手数据接收
182 字节握手数据发送
43 字节收到握手数据
握手成功
----- 客户端握手已执行
----- 服务器凭据已验证

服务器主题:C=US, S=California, L=Mountain View, O=Google Inc, CN=smtp.gmail.com
服务器发行人:C=ZA, S=Western Cape, L=Cape Town, O=Thawte Consulting cc , OU=Certification Services Division, 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-增强状态代码
250 流水线

发送 7 个字节的明文:
QUIT

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

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

于 2010-01-12T10:43:20.787 回答
5

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

于 2010-01-09T02:42:22.320 回答
4

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

这个问题太严重了,太容易搞砸了,每次你想解决它时都要自己动手。如果您对 OpenSSL 有疑问,请尝试通过对话和 OpenSSL 补丁来解决。

(没有人能避免把它搞砸,即使是微软,甚至是 OpenSSL。使用您可以查看其来源并且在出现问题时得到修补的东西。使用 OpenSSL。)

于 2010-01-09T02:15:43.340 回答
0

你会为这种可编译的工作源代码支付多少费用?或者你期待有人把它给你吗?OpenSSL 的人已经做到了。这很丑陋,但价格是合适的。

于 2010-01-09T02:21:34.313 回答