【问题标题】:Apple SSL Secure TransportApple SSL 安全传输
【发布时间】:2017-06-25 05:28:17
【问题描述】:

我刚刚开始使用 os x,完全没有使用它的经验。但我现在要做的就是用 Apple Security API 替换旧的 OpenSSL 代码。我正在使用Secure Transport,我对这些功能有点困惑:SSLSetIOFuncsSSLWriteSSLRead

所以SSLSetIOFuncs 设置了执行写入/读取操作的回调(我应该实现)。并且此时出现了很多问题:

  1. 首先,我只是不明白我为什么要实现它(在 OpenSSL 中它已经实现了)。但是,好吧,我只需要。
  2. 是否应加密此实现?我觉得不是。

还有以下2个功能:

OSStatus
SSLWrite                    (SSLContextRef      context,
                             const void *       __nullable data,
                             size_t             dataLength,
                             size_t             *processed);

OSStatus
SSLRead                    (SSLContextRef       context,
                            void *              data,           
                            size_t              dataLength,
                            size_t          *processed);

它们是“普通应用程序级读/写”。根据代码 cmets。那么为什么我需要定义这两个回调来读写呢?如果前两个是回调,我应该在我的代码中调用哪些函数来读取/写入(当我真的需要从服务器读取一些数据时)?

没有好的文档,我都被它困住了。可能是我太垃圾了,但无论如何,一点帮助都是完美的。请帮忙!

【问题讨论】:

    标签: macos ssl secure-transport


    【解决方案1】:

    SecureTransport 是基于回调的,与 OpenSSL 的 SSL_read()SSL_write() 函数不同。这可能需要对您的代码进行重大更改。如果您想要一个可以使用 SecureTransport 进行加密的read/write 风格的 API,请查看CFNetwork,特别是CFStream

    【讨论】:

    • 谢谢!我看到你对这个 API 很熟悉。那你能回答另一个问题吗?那么这两个回调(SSLReadFunc 和 SSLWriteFunc)应该如何正确实现呢?如果我只实现从/到套接字的读/写(例如使用 C posix 读/写函数)那么加密呢(因为 OpenSSL SSL_write() 和 SSL_read() 执行加密)?以及 SSLWrite、SSLRead 函数和 SSLReadFunc、SSLWriteFunc 回调是如何连接的?我应该在这两个回调函数中调用 SSLWrite、SSLRead 吗?
    • SSLWrite() 和 SSLRead() 仅应在建立 SSL 会话时使用。如果您使用 BSD 套接字,那么建议您遵循以下示例:github.com/robbiehanson/CocoaAsyncSocketgithub.com/noodlewerk/NWPusher
    猜你喜欢
    • 2011-08-07
    • 2010-12-10
    • 1970-01-01
    • 2011-07-03
    • 2011-09-24
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    相关资源
    最近更新 更多