【问题标题】:XMPPFramework - Security OptionsXMPPFramework - 安全选项
【发布时间】:2014-09-11 18:22:57
【问题描述】:

我想使用 XMPPFramework 实现服务器端安全性。服务器必须在建立连接之前验证来自客户端的证书。我发现有这些方法可以做到这一点:

kCFStreamSSLLevel
kCFStreamSSLAllowsExpiredCertificates
kCFStreamSSLAllowsExpiredRoots
kCFStreamSSLAllowsAnyRoot
kCFStreamSSLValidatesCertificateChain
kCFStreamSSLPeerName
kCFStreamSSLCertificates

但我不知道什么是用来做什么的。谁能帮我什么以及如何使用这些方法来实现服务器端安全?服务器是 Openfire,客户端是 iOS 设备。

【问题讨论】:

    标签: ios security xmpp xmppframework


    【解决方案1】:

    很遗憾,您列出的以下 5 个安全选项已被弃用。

    kCFStreamSSLLevel
    kCFStreamSSLAllowsExpiredCertificates
    kCFStreamSSLAllowsExpiredRoots
    kCFStreamSSLAllowsAnyRoot
    kCFStreamSSLValidatesCertificateChain
    

    来自XMPPFramework - GCDAsyncSocket:

    * ==== The following UNAVAILABLE KEYS are: (with throw an exception)
     * 
     * - kCFStreamSSLAllowsAnyRoot (UNAVAILABLE)
     *     You MUST use manual trust evaluation instead (see GCDAsyncSocketManuallyEvaluateTrust).
     *     Corresponding deprecated method: SSLSetAllowsAnyRoot
     * 
     * - kCFStreamSSLAllowsExpiredRoots (UNAVAILABLE)
     *     You MUST use manual trust evaluation instead (see GCDAsyncSocketManuallyEvaluateTrust).
     *     Corresponding deprecated method: SSLSetAllowsExpiredRoots
     *
     * - kCFStreamSSLAllowsExpiredCertificates (UNAVAILABLE)
     *     You MUST use manual trust evaluation instead (see GCDAsyncSocketManuallyEvaluateTrust).
     *     Corresponding deprecated method: SSLSetAllowsExpiredCerts
     *
     * - kCFStreamSSLValidatesCertificateChain (UNAVAILABLE)
     *     You MUST use manual trust evaluation instead (see GCDAsyncSocketManuallyEvaluateTrust).
     *     Corresponding deprecated method: SSLSetEnableCertVerify
     *
     * - kCFStreamSSLLevel (UNAVAILABLE)
     *     You MUST use GCDAsyncSocketSSLProtocolVersionMin & GCDAsyncSocketSSLProtocolVersionMin instead.
     *     Corresponding deprecated method: SSLSetProtocolVersionEnabled
     *
     * 
     * Please refer to Apple's documentation for corresponding SSLFunctions.
    

    至于其他2个选项,

    来自Apple Documentation - Secure Transport Reference:

    调用SSLSetPeerDomainName 指定您要连接的对等方的完全限定域名(可选但强烈推荐)。

    调用SSLSetCertificate指定用于认证的证书(服务器端需要,客户端可选)。


    您最好的选择是:

    使用

    GCDAsyncSocketManuallyEvaluateTrustxmppStream:willSecureWithSettings:

    那么

    xmppStream:didReceiveTrust: 中验证您的服务器证书。

    【讨论】:

    • @vishnuvarthan 查看这篇文章的问题和答案代码:iOS and SSL: Unable to validate self-signed server certificate
    • 该链接使用 NSURL,但我不希望 NSURL 我正在实现 XMPP。你能告诉我类似于我在上一条评论中给出的链接的方法吗?我正在寻找类似的东西。
    • @KeithOYS 你有没有实现过文件传输功能?如果是,那么请您帮忙解决一些有关文件传输的问题。
    • @KeithOYS 我的应用程序包中有服务器提供的证书,如何在我的代码中导入证书并将其发送到服务器进行身份验证。
    • @KeithOYS 你能告诉我如何在 xmpp 中使用 TLS 1.0 版
    【解决方案2】:

    让诊断程序忽略它,直到开发出替代方法。在受影响的代码上方使用它。
    #pragma clang diagnostic ignored "-Wdeprecated-declarations"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 2010-09-21
      • 2017-03-18
      • 2020-12-16
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多