|
作者:tombkeeper
下午寫了一篇《talk about google talk》,里面提到,雖然google talk本身還不支持加密,但是目前至少用Gaim這樣的客戶端已經(jīng)可以進行加密通信了。 晚上吃飯的時候,我想應(yīng)該找一個既能用標(biāo)準(zhǔn)客戶端,又能加密通信,還要簡便易行,老少皆宜的法子出來。要不然總覺得有點對不起觀眾。 我對jabber協(xié)議一無所知,也不打算花時間去看文檔,索性就硬上。先抓gaim的加密通信包和官方客戶端的非加密包看看再說。 官方客戶端的身份認(rèn)證是通過gmail.com來做的,這個過程基于HTTPS,是加密的;聊天數(shù)據(jù)通過talk.google.com,不加密。 Gaim的認(rèn)證和聊天都通過talk.google.com,而且必須選擇加密。talk.google.com不支持非加密的身份認(rèn)證過程。 奇怪的是,無論是加密還是不加密,聊天數(shù)據(jù)都是通過talk.google.com的5222端口。根據(jù)抓包看到的數(shù)據(jù),和對5222手工SSL協(xié)商失敗這個結(jié)果來看。jabber所支持的加密方式和HTTPS、POPS等是不完全一樣的。也就是說,不能簡單的通過stunnel來建立加密隧道。 事情就這樣結(jié)束了么?當(dāng)然不會,否則我現(xiàn)在一定正在郁悶,而不是寫這篇文檔。 像我這種人,看到一個5222端口,就不可能不去看看有沒有5221、5223、5224……這是多少年養(yǎng)成的習(xí)慣。我發(fā)現(xiàn)talk.google.com上就有5223和5224端口。簡單測試了一下,發(fā)現(xiàn)這兩個端口都支持標(biāo)準(zhǔn)SSL協(xié)商。那么這能用否這兩個端口進行通信呢? 我做了下面這幾件事: 1、在機器上的%SyetemRoot%/system32/drivers/etc/hosts中加了這一行: 127.0.0.1 talk.google.com 2、在stunnel.conf中加了這些: [Google Talk] accept = 127.0.0.1:5222 connect = talk.google.com:5223 然后重新啟動Stunnel,再運行g(shù)oogle talk。 OK,現(xiàn)在google talk完全可以正常使用,并且這時所有來往的數(shù)據(jù)都是經(jīng)過加密的。 看我blog的朋友不一定都搞技術(shù),所以這里科普一下:上面做的第一件事是讓google talk客戶端認(rèn)為我本機就是聊天服務(wù)器talk.google.com;第二件事是在本機建立了一個加密隧道,google talk用非加密數(shù)據(jù)和本機的Stunnel通信,Stunnel把數(shù)據(jù)加密后傳遞給能接收標(biāo)準(zhǔn)SSL加密的talk.google.com:5223,并把服務(wù)器的加密數(shù)據(jù)解密后交給google talk客戶端。 打個比方,google talk是一個只會說漢語的人,Gaim懂意大利語,Stunnel既懂漢語又懂阿拉伯語,talk.google.com:5222懂意大利語和漢語,talk.google.com:5223只懂阿拉伯語。 現(xiàn)在我們要和talk.google.com說話。雖然google talk和talk.google.com:5222可以直接用漢語溝通,但是這樣會被偷聽。所以我們讓google talk先把要說的話用漢語告訴Stunnel(這個過程是在自己家完成的,不會被偷聽),然后Stunnel用阿拉伯語對talk.google.com:5223轉(zhuǎn)述。或者,用Gaim和talk.google.com:5222說意大利語也是一個選擇。 PS:又看了一下google的文檔,這個5223是為了兼容某些jabber客戶端而留的??赡苣壳熬褪怯袃煞Njabber加密方式并存,不同客戶端用了不同方式。 文檔里面沒有提5224,以我惡毒的心來揣測,估計是因為加密對系統(tǒng)負(fù)擔(dān)比較大,google的人特意開了這個口給熟人用的,這個沒什么人用的端口速度應(yīng)該比較快——哈哈哈哈,純屬玩笑 |
|
|