如何在IOS中使用安全的Ejabbered服务器连接XMPP客户端?

时间:2017-11-14 06:54:49

标签: ssl xmppframework client-certificates gcdasyncsocket tls1.1

我正在开发使用SSL安全的Ejabbered服务器的聊天应用程序     和TLSv1.1 / 1.2,我正在尝试连接客户端到服务器获取以下错误代码。

<template>
  <header class="..." >
    ... (1000 rows)
  </header>
</template>

<script>
export default {
  name: 'Header'
}
</script>

必需的设置     在Appdelegate(Setupstream)

Error Domain=GCDAsyncSocketErrorDomain Code=7 "Socket closed by remote peer" UserInfo={NSLocalizedDescription=Socket closed by remote peer.

之后手动信任自定义证书验证

 _xmppStream.hostName=@"";   // hostname
 _xmppStream.hostPort=5223;  // 5223 for secure SSL connection
 _xmppStream.startTLSPolicy = XMPPStreamStartTLSPolicyRequired;
  customCertEvaluation = YES;

之后匹配completionHandler中的客户端服务器证书。

- (void)xmppStream:(XMPPStream *)sender willSecureWithSettings:
   (NSMutableDictionary *)settings{
    NSString *expectedCertName = [_xmppStream.myJID domain];

  if (expectedCertName){
   [settings setObject:expectedCertName forKey:(NSString *)kCFStreamSSLPeerName];
  }
  if (customCertEvaluation){
   [settings setObject:@(YES)forKey:GCDAsyncSocketManuallyEvaluateTrust];
  }

GCDAsyncSocket.m / XMPPStream.m类中是否需要进行任何自定义以进行安全连接。

1 个答案:

答案 0 :(得分:0)

尝试使用此弃用方法:

[self.xmppStream setHostName:@"yourhostname.com"]

还要确保正确设置主机名:

https未使用{{1}}作为前缀。

目前我们正在使用此解决方法,而我们找到了一种在没有弃用连接方法的情况下工作的方法。