Ios XMPPFramework-安全选项

Ios XMPPFramework-安全选项,ios,security,xmpp,xmppframework,Ios,Security,Xmpp,Xmppframework,我想使用XMPPFramework实现服务器端安全。服务器必须在建立连接之前验证来自客户端的证书。我发现有以下几种方法可以做到这一点: kCFStreamSSLLevel kCFStreamSSLAllowsExpiredCertificates kCFStreamSSLAllowsExpiredRoots kCFStreamSSLAllowsAnyRoot kCFStreamSSLValidatesCertificateChain kCFStreamSSLPeerName kCFStreamS

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

kCFStreamSSLLevel
kCFStreamSSLAllowsExpiredCertificates
kCFStreamSSLAllowsExpiredRoots
kCFStreamSSLAllowsAnyRoot
kCFStreamSSLValidatesCertificateChain
kCFStreamSSLPeerName
kCFStreamSSLCertificates

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

不幸的是,您列出的以下5个安全选项已被弃用

kCFStreamSSLLevel
kCFStreamSSLAllowsExpiredCertificates
kCFStreamSSLAllowsExpiredRoots
kCFStreamSSLAllowsAnyRoot
kCFStreamSSLValidatesCertificateChain

至于其他两个方案,

调用
SSLSetPeerDomainName
指定要连接的对等方的完全限定域名(可选,但强烈建议)

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


您最好的选择是:

使用

xmppStream:willSecureWithSettings:

然后


xmppStream:didReceiveTrust:

中验证服务器的证书,只需让诊断忽略它,直到可以开发替换方法。在生效代码上方使用此选项。

#pragma-clang诊断被忽略“-Wdeprecated声明”

@vishnuvarthan查看本文问答中的代码:链接使用NSURL,但我不想要NSURL,我正在实现XMPP。你能告诉我与我在前面评论中给出的链接类似的方法吗?我正在寻找类似的方法。@KeithOYS嘿,你实现过文件传输功能吗?如果是,请您帮助解决一些有关文件传输的问题。@KeithOYS我的应用程序包中有一个由服务器提供的证书,我如何在代码中导入证书并将其发送到服务器进行身份验证。@KeithOYS您能告诉我如何在xmpp中使用TLS 1.0版吗
* ==== 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.