65.9K
CodeProject 正在变化。 阅读更多。
Home

CAsyncSslSocketLayer - CAsyncSocketEx 的 SSL 层类

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.88/5 (12投票s)

2003 年 4 月 6 日

3分钟阅读

viewsIcon

93147

downloadIcon

414

这个类是CAsyncSocketEx的SSL层,使用OpenSSL。

引言

CAsyncSslSocketLayerCAsyncSocketEx 的一个层类,允许您建立与服务器的SSL安全连接。

有关 CAsyncSocketEx 和一般层系统的信息,请阅读我的 CAsyncSocketEx 文章

如何使用

使用这个类非常简单。在最简单的情况下,只需将 CAsyncSslSocketLayer 的一个实例添加到您的套接字,并在创建套接字后调用 InitClientSsl 即可。

这个类只有三个新的公共函数

  • InitClientSsl();

    此函数建立与服务器的SSL连接。一旦套接字创建完毕,您就可以随时调用它。您很可能希望在为套接字调用 Create 后立即调用此函数。但有时,您需要稍后调用此函数。一个例子是使用显式SSL的FTP连接:在这种情况下,您需要在收到对 AUTH SSL 命令的回复后调用 InitClientSsl

  • UsingSSL();

    如果您之前调用了 InitClientSsl(),则返回 true

  • SetNotifyReply(int nID, int nCode, int result);

    您只能在收到具有 SSL_VERIFY_CERT ID的特定于层的回调后调用此函数。有关详细信息,请参见下文。

此层将一些特定于层的通知发送到您的套接字实例,您可以在您的套接字类的 OnLayerCallback 中处理它们。有效的通知 ID 为

  • SSL_INFO 0

    param2 有两个可能的值

    • SSL_INFO_ESTABLISHED 0 - 如果 SSL 协商成功,您将收到此通知。
    • SSL_INFO_SHUTDOWNCOMPLETE 1 - 如果 SSL 连接已成功关闭,您将收到此通知。有关详细信息,请参见下文。
  • SSL_FAILURE 1

    如果 SSL 连接无法建立或现有连接失败,则会发送此通知。param2 的有效值为

    • SSL_FAILURE_UNKNOWN 0 - 详细信息可能已通过 SSL_VERBOSE_WARNINGSSL_VERBOSE_INFO 通知发送。
    • SSL_FAILURE_ESTABLISH 1 - SSL 协商期间出现问题
    • SSL_FAILURE_LOADDLLS 2
    • SSL_FAILURE_INITSSL 4
    • SSL_FAILURE_VERIFYCERT 8 - 远程 SSL 证书无效
  • SSL_VERBOSE_WARNING 3
  • SSL_VERBOSE_INFO 4

    这两个通知包含一些附加信息。param2 给出的值是指向以 null 结尾的字符串 (char *) 的指针,其中包含一些有用的信息。

  • SSL_VERIFY_CERT2

    每次必须验证远程证书时都会发送此通知。param2 是指向 t_SslCertData 结构的指针,该结构包含有关远程证书的一些信息。如果您信任该证书,则返回 1,如果您不信任它,则返回 0。如果您不确定,以便用户必须选择是否信任该证书,则返回 2。在这种情况下,您稍后必须调用 SetNotifyReply 才能恢复 SSL 连接。nID 必须是 t_SslCertData 结构的 priv_data 元素,并且 nCode 必须是 SSL_VERIFY_CERT。如果信任该证书,则将 nAction 设置为 1,如果不信任它,则设置为 0。

在发送数据后关闭连接时要小心,并非所有数据可能都已发送。在关闭连接之前,您应该调用 Shutdown() 并等待 SSL_INFO_SHUTDOWNCOMPLETE 通知。这确保所有加密数据确实已发送。

许可证

只要您不声称您编写了它,并且此版权声明在源文件中保持不变,就可以随意使用此类。如果您在商业应用程序中使用此类,请向 tim.kosse@gmx.de 发送一条简短消息。

此产品包括 OpenSSL 项目 开发的用于 OpenSSL 工具包的软件。

© . All rights reserved.