分享

弃用QQ和微信!全面转向基于XMPP(Jabber)的即时聊天

 WindySky 2016-07-05

国内的互联网服务越来越流氓,现在微信已经需要实名验证才能加入群聊。早在微信刚出来的时候,就非常流氓的会要求导入手机通讯录。同样的超级流氓,还包括QQ,因其封闭其他开源实现,而自身的Linux客户端早已废置,总之放弃这样的流氓已经刻不容缓!

特别是其后还有无比流氓的天********朝********g府。如果不想被“有关部门”监视盯守,使用去中心化的,且完全由自由开源软件驱动的相应聊天工具,当然是再好不过了。

因此首先我会想到XMPP(Jabber)协议,Jabber是一个开放源代码形式组织产生的网络实时通信协议。XMPP原本是为即时通讯而量身定制,但由于XML Stanza本身是XML元素,在基于XML灵活发展的特性下,使得XMPP也可以适用其他方面,已经得到了IETF的批准。XMPP与IMPP、PRIM、SIP(SIMPLE)合称四大IM协议主流,在此4大协议中,XMPP是最灵活的。

XMPP协议图解
XMPP协议图解

早期的Google Talk也是这个协议(Hangout已经禁止跨服务器间通讯),Facebook Message也与此兼容。另外国产互联网服务里的新浪微博的私信功能是基于XMPP的,还有据称米聊、人人桌面和陌陌,也是XMPP/Jabber协议的实现。

XMPP的功能和优点


除 了常用的IM功能以外,还支持SASL和TLS加密,因为它最大的好处是分布式/去中心化的,这样就使得ISP的封锁和公愤网(G………………F………………W)无能为力。当然最 重要的是因为多服务器S2S连接,产生的负载均衡效应,这不容小觑。再加它的实现方式依赖XML,因此强大的可扩展性为此增加了非常多的功能。目前XMPP标准基金会负责制订和维护相关标准。
有人认为XMPP不能发图片和传文件,实际上这些都是协议里支持的,主要是依赖客户端支持。试想,如果这些协议不能支持,那么微薄私信的发图功能怎么实现呢?当然了,在XMPP协议层里,语音视频这种SIP也是支持的,有兴趣的可以研究XMPPJingle协议。
XMPP也 不是没有缺点。一个严重问题是因为全部都由服务器中转,服务器的压力会比较大,特别是高连接数的情况下。另外一个致命问题是某些服务器程序会丢消息(曾有 人反映openfire就会丢消息),不过常见的开源软件实现,基本都解决了这问题,有些采用离线消息的方式提供暂存,进而可以解决这些问题。目前我的使 用过程中,尚没有发现丢消息的问题。
多点登录,可以用多个设备同时登录(以优先级区分之)。这既是优点也是缺点,优点是多个登录端可以互相通信, 缺点是不容易同步。因此若A和B通信,B有3个客户端登录,那么若A给B发送一条消息,只会默认推送到优先级高的客户端上,除非A指定B的某个已经登录的 客户端。因此XMPP需要多点同步功能也是需要解决的。
多人聊天。XMPP/Jabber实现多人聊天(MUC,Multiply User Chat) 是采用聊天室的方式实现的,也就是开一个群聊的服务,比如jabber.ru服务器会单独开一个conference.jabber.ru来帮助大家实现 多人聊天。想要群聊需要先建立一个房间,比如room@conference.jabber.ru,然后其他人加入到这房间里即可多人聊天了。多人聊天是 个可选服务,很多服务器提供商提供了,有些则没有提供。因此缺点就是群聊不是很方便,在现在很多聊天软件已经可以非常轻易加人构成群聊的情况下,这种方式 多少还有点低端,与传统的QQ群聊很类似。

申请XMPP(Jabber)账号


因为Jabber/XMPP是可以跨服务器的(也可以在服务器端禁用这个功能),这样只要有一个账号就行就可以与所有人公开的人通信。这里推荐使用XMPP.net(点表头就可以排序)网站列出来的公共服务器列表。右侧两栏是安全评级,分别是客户端-服务器端(C2S)安全评级,以及服务器与服务器(S2S)之间的安全评级。A级为最高,F为最差。
我花了一些时间遴选,既考虑到安全性(必须是A评级),又考虑其提供较多的服务和低ping值。最后可选的服务器如下:

  • xmpp.jp:服务器在日本,北京电信的ping值在50~60ms之间,甚至快过一些国内网站。主要优势是其速度快,安全性也不错(因为支持SSLv3,安全性略低一点点)。综合考量是最佳选择。

  • wtfismyip.com:服务器在美国,AWS的云主机,ping值稳定在300多ms。其优势是安全性极佳。速度也不慢,同时还支持Tor和暗网。因为是AWS云主机,我认为稳定持久可能会不能保证,带宽可能比较少。追求极佳安全性的时候可以考虑。

  • swissjabber.org: 苏黎世的服务器。速度还是很不错的,安全性也还不错。一个传统的服务器,值得作为后备账号使用。综合能力不输给其他的。

  • jwchat.org:一个较低ping值的美国服务器。安全性也不错,可以作为常用账号使用。


选好服务器以后,如何注册呢?因为XMPP/Jabber对用户注册的后端并没有规定和限制,因此各家服务提供商就各自有自己的数据存储方式,目前主流的XMPP/Jabber服务器都可以连接数据库(比如MySQL)、LDAP服务器、甚至单纯的只是文件存储。当然,这些注册也大多是免费的!
常用的注册方式,比如在网页注册,有的则是在客户端直接注册(这也是XMPP协议里支持的)。下面说说客户端注册,至于网页注册嘛,大家可以自己研究咯,反正非常简单。

准备客户端


PC端肯定要推荐一些比较经典的啦,诸如PidginEmpathyKopeteMiranda IM(只支持Windows)或Adium(只支持Mac OS X)这样的都可以很好的兼容XMPP/Jabber协议,不过呢还有一些专门的客户端软件,比如 GajimPsi+(这是Psi的升级版,增加了更多功能)这样的XMPP专业工具。类似Pidgin这样大而全的软件可以很好的支持XMPP几乎所有的功能(通过各种插件)。而专有的软件则可以更加专注于协议的实现,更加完善,也更加富有使用的优势,特别是需要加密聊天比如OTR和PGP这样的时候,专攻XMPP协议的这些客户端就更方便可靠了。当然还有命令行下的软件,mcabber是专门设计给XMPP/Jabber使用的,可以非常方便的提供OTR和PGP加密聊天。
Gajim下的基本聊天
Gajim下的基本聊天

手机移动端。Android和iOS都可以用ChatSecure,一款知名的支持OTR的XMPP/Jabber的手机软件,很是方便。但如果希望支持PGP,则推荐使用Conversations,Android用户可以用过F-Droid非常容易的安装(这款APP在Google Play竟然是收费的!)。

Android 下的客户端 ChatSecure
Android 下的客户端 ChatSecure

连接XMPP/Jabber,享受聊天


这个过程与其他IM软件几乎没有什么区别了,只是因为客户端不同而造成的操作区别而已,只是注意,如果添加好友,每个人的识别方式,不再是一个号码(类似ICQ或者QQ),或者一个字符串(微信号),这里变成了形如
username@domain.name

这样的形式有很大的好处,不用费劲去记忆大量无意义的号码了,更可以不用担心微信号冲突的问题。不过这也带来很大的缺点,就是有可能冒用身份。某人冒用了他人的XMPP/Jabber 账户,容易产生一些问题。唯一的办法的是通过类似openPGP/GPG这样的方式来标明身份。这也就是为什么我青睐使用Psi+或者mmcabber这 样客户端的。因为可以使用openPGP/GPG密钥来签名登录服务器,这样的好处是大大降低了身份被冒用的风险。
因此,添加好友,或者散发自己的XMPP/Jabber账户的时候,就可以这样以邮件地址的方式散布。很关键的一点是要告知别人如何认证你的身份,制造身份的唯一性。

私密聊天

目前常用IM的端对端私密聊天方式主要有两种,分别是OTR(Off The Record)OpenPGP,这两种都是利用非对称加密的原理,实现加密聊天。

OTR是XMPP/Jabber 协议里提倡的加密方式,优点是速度快,可以快速建立链接,利用Deffi-Hellman密钥交换算法和前向加密原理,可以快速加密信息,并且保证安全。 缺点也有,由于是基于客户端的,如果更换客户端,或者多终端登录的时候无法保证身份一致性,这要求聊天对方信任我的所有客户端密钥,这问题会导致伪造身份 出现。

Gajim 下的 OTR 加密聊天
Gajim 下的 OTR 加密聊天

对OpenPGP的支持并不是每个客户端都有,能够符合XMPP-XEP0027要求的不多,目前Gajim、Psi+和mcabber都可以满足这个需求。openPGP毕竟是面向邮件的非对称加密,因此其速度和效率尚不足以与快速的即时消息相适应。

SSL/TLS连接也很重要,虽然对聊天双方来说都是一样的,但因为多增加了一层加密,使得聊天更加安全。

自己搭建XMPP/Jabber服务器:Prosody / ejabberd


目前自己搭建XMPP/Jabber服务器是非常可行的,常用的方案有很多,我亲测的是 Prosody 以及 ejabberd 这两种。前者更加轻量级,也简单易行,而 ejabberd 有更为强大的配置,可以自行配置强大而独立的XMPP/Jabber服务供他人使用。可以自行在互联网上搜索相关的内容,搭建起来并不复杂。

我自己架设了一个测试用的XMPP/Jabber服务器,tonghuix.asia。有兴趣的朋友可以来测试。注意,服务器在墙内且未备案,虽然执行加密,仅可做普通连接和测试使用,不得作为可能涉密的使用。服务器的测试结果:客户端-服务器服务器之间

特别提醒!


  • 千万不要忘记密码!。大多数XMPP服务提供商并没有提供密码找回功能。因此密码要妥善保管并牢记!

  • 确定主要身份,防止冒用。莫轻信聊天的对方。OTR的方式提供了通过保密问题的方式验证身份,虽然比较LOW,不过却是目前比较好的方法了。

  • 一定选择妥善的加密服务。首先登录连接必须是SSL加密,若能选择一定考虑服务器是否支持TLSv1.2,因为这是目前比较安全的。另外聊天一定选用OTR或者PGP其中一种,一般OTR就够,若对保密要求比较高可以考虑OpenPGP。

  • 安全起见,一定选择自由开源的客户端。这毋庸赘言了!不仅客户端,包括其上的插件也必须是自由开源的。

  • 多人聊天的时候防止外人窜入。我们曾经测试MUA多人聊天的时候,一个俄国人突然窜入我们的房间,并大谈俄日争端的北方四岛问题……所以安全起见,多人聊天的时候设置房间密码比较好,我觉得如果追求最好的多人聊天,比如在线开会等,最好的还是IRC。


关于XMPP/Jabber 拉拉杂杂的先说这么多,有空我可以再基于具体客户端,写一个图文的教程。目前来看,移动互联网时代,分布式去中心化一定是大势所趋,所以我觉得必须要解决 的问题就是让开源的协议和客户端尽快流行起来。总之,大家都用起来,早日屏蔽流氓软件,这条路一定不会很顺利,毕竟人间正道是沧桑。

从现在开始我就弃用QQ和微信了,欢迎加我的XMPP账号,大家一起畅聊!以下两个均可:

tonghuix@jabber.
tonghuix@xmpp.jp

本文转自网络。版权归原作者所有。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多