mac端XMPP客户端:Adium
在测试环境中遇到了服务器证书不被信任情况。导致xmpp始终无法登入。假如你在adium中设置如下
Require SSL/TLS :由服务器端决定的,如果没开,你就不用勾选。
Do strict certificate checks :在建立TSL通道的时候会去检测证书是否值得信任。(证书过期,没有经过CA认证等情况都会弹窗不信任。)
服务器端开启TLS认证,但是你的服务器的证书又是自己设置的。不是通过CA认证的。就会弹窗。
以上就是遇到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中可以添加一个弹窗,让用户决定是否继续和服务器连接。
图片差不多是这样的(网上随便扒的)。有选择,是否继续。