mac端XMPP客戶端:Adium
?在測(cè)試環(huán)境中遇到了服務(wù)器證書不被信任情況。導(dǎo)致xmpp始終無(wú)法登入。假如你在adium中設(shè)置如下
Require SSL/TLS :由服務(wù)器端決定的衙熔,如果沒開,你就不用勾選项鬼。
Do strict certificate checks :在建立TSL通道的時(shí)候會(huì)去檢測(cè)證書是否值得信任蜻直。(證書過(guò)期,沒有經(jīng)過(guò)CA認(rèn)證等情況都會(huì)彈窗不信任括眠。)
?服務(wù)器端開啟TLS認(rèn)證彪标,但是你的服務(wù)器的證書又是自己設(shè)置的。不是通過(guò)CA認(rèn)證的掷豺。就會(huì)彈窗捞烟。
?以上就是遇到CA證書不信任薄声,在Adium上的表現(xiàn)情況。
?解決方法在里面描述比較清楚题画。
https://github.com/robbiehanson/XMPPFramework/wiki/Security
我最后總結(jié)下:
1:設(shè)置策略默辨,這個(gè)在初始化xmppStream的時(shí)候設(shè)置。(相當(dāng)于Adium勾選了Require SSL/TLS)
xmppStream.startTLSPolicy = XMPPStreamStartTLSPolicyRequired;
2:在添加多播代理后完成代理苍息。向字典里添加信任缩幸。可以和沒有信任的證書的服務(wù)器建立TSL通道竞思。(此處修改后xmppstream的isSecure變成了YES)
- (void)xmppStream:(XMPPStream *)sender willSecureWithSettings:(NSMutableDictionary *)settings
{
settings[GCDAsyncSocketManuallyEvaluateTrust] = @(YES);
}
3:使GCDAsyncSocketManuallyEvaluateTrust生效表谊。只有完成上面的函數(shù),下面的函數(shù)才會(huì)被調(diào)用衙四。
- (void)xmppStream:(XMPPStream *)sender
didReceiveTrust:(SecTrustRef)trust
completionHandler:(void (^)(BOOL shouldTrustPeer))completionHandler
{
completionHandler(YES);
}
?最后在說(shuō)一下這個(gè)代理方法
- (void)xmppStream:(XMPPStream *)sender
didReceiveTrust:(SecTrustRef)trust
completionHandler:(void (^)(BOOL shouldTrustPeer))completionHandler;
?有時(shí)候铃肯,我們?yōu)g覽器訪問(wèn)的時(shí)候也遇到證書不受信任的https網(wǎng)站。瀏覽器都會(huì)彈窗讓你選擇是否繼續(xù)訪問(wèn)传蹈。這個(gè)代理方法就是用來(lái)處理這個(gè)的押逼。我們這里直接回調(diào)了YES。我們?cè)赼pp中可以添加一個(gè)彈窗惦界,讓用戶決定是否繼續(xù)和服務(wù)器連接挑格。
?圖片差不多是這樣的(網(wǎng)上隨便扒的)。有選擇沾歪,是否繼續(xù)漂彤。