美文网首页
XMPP遇到服务器证书不被信任情况

XMPP遇到服务器证书不被信任情况

作者: 双手插兜Jeff | 来源:发表于2016-10-08 00:02 被阅读506次

mac端XMPP客户端:Adium

 在测试环境中遇到了服务器证书不被信任情况。导致xmpp始终无法登入。假如你在adium中设置如下

settingPIC.png

Require SSL/TLS :由服务器端决定的,如果没开,你就不用勾选。
Do strict certificate checks :在建立TSL通道的时候会去检测证书是否值得信任。(证书过期,没有经过CA认证等情况都会弹窗不信任。)

 服务器端开启TLS认证,但是你的服务器的证书又是自己设置的。不是通过CA认证的。就会弹窗。


pop.png

 以上就是遇到CA证书不信任,在Adium上的表现情况。
 解决方法在里面描述比较清楚。

https://github.com/robbiehanson/XMPPFramework/wiki/Security

我最后总结下:
1:设置策略,这个在初始化xmppStream的时候设置。(相当于Adium勾选了Require SSL/TLS)
xmppStream.startTLSPolicy = XMPPStreamStartTLSPolicyRequired;
2:在添加多播代理后完成代理。向字典里添加信任。可以和没有信任的证书的服务器建立TSL通道。(此处修改后xmppstream的isSecure变成了YES)

- (void)xmppStream:(XMPPStream *)sender willSecureWithSettings:(NSMutableDictionary *)settings
{
  settings[GCDAsyncSocketManuallyEvaluateTrust] = @(YES);
}

3:使GCDAsyncSocketManuallyEvaluateTrust生效。只有完成上面的函数,下面的函数才会被调用。

- (void)xmppStream:(XMPPStream *)sender 
   didReceiveTrust:(SecTrustRef)trust
 completionHandler:(void (^)(BOOL shouldTrustPeer))completionHandler
{
  completionHandler(YES);
}

 最后在说一下这个代理方法

- (void)xmppStream:(XMPPStream *)sender 
   didReceiveTrust:(SecTrustRef)trust
 completionHandler:(void (^)(BOOL shouldTrustPeer))completionHandler;

 有时候,我们浏览器访问的时候也遇到证书不受信任的https网站。浏览器都会弹窗让你选择是否继续访问。这个代理方法就是用来处理这个的。我们这里直接回调了YES。我们在app中可以添加一个弹窗,让用户决定是否继续和服务器连接。
 图片差不多是这样的(网上随便扒的)。有选择,是否继续。


notTrust.png

相关文章

网友评论

      本文标题:XMPP遇到服务器证书不被信任情况

      本文链接:https://www.haomeiwen.com/subject/qmfuyttx.html