XMPP加密通讯简明教程

展开全文

一、什么是XMPP以及我们为什么要使用XMPP

简而言之,XMPP(又称为Jabber)是一种开放的互联网实时通讯协议。很多流行的聊天软件都是XMPP的封装应用,比如Google Hangout、Facebook Message、AOLChat、米聊、人人桌面和陌陌等。很多网络游戏的内部聊天用的也是XMPP协议。

与通常我们使用的集中式架构的通讯软件(如QQ、微信)不同,采取邦联式架构的XMPP客户端与服务器、服务器之间的通信使用的是公开而标准化的协议——这保证了任何人都可以参考这些标准开发出可以和系统中其他组件互操作的组件,甚至可以自己搭建服务器,为自己提供服务。通过XMPP所支持的“不留记录即时通讯协议(Off-the-Record Messaging,缩写为OTR,原理见网址),可以实现端到端通讯的加密,从而保障“私聊”的真正“私密”性质和通讯的安全性。

我们推广XMPP是希望推动这种开放的聊天协议和自由软件的使用,用XMPP配合OTR或OMEMO的端对端加密聊天,替代传统封闭的、有隐私泄漏风险的私权软件。

二、安装客户端

支持 XMPP 的客户端有很多,这里仅选取经过 BLUG 成员测试挑选之后,最适合自由软件社群的。以下所列均为自由软件。

PC 客户端:推荐使用 Pidgin,GNU/Linux 发行版可通过包管理器搜索“pidgin”来安装,也可以从 https://pidgin.im 下载源码包编译安装。Windows 可前往 https://pidgin.im 网站下载二进制安装包,但 Windows 作为私有系统存在安全隐患,且Pidgin 的 otr 插件和消息反馈插件需要额外下载。最好的做法是把它换成 GNU/Linux,并在 GNU/Linux 安装 pidgin。Pidgin 支持通过额外插件拓展功能,实现完整 otr 加密,pidgin 使用的 otr 插件—— pidgin-otr 也可以在通过 GNU/Linux 发行版的包管理器下载安装。

移动客户端:Android 系统强烈推荐 blabber.im,支持 omemo 加密。可以直接访问 https://f-droid.org/en/packages/de.pixart.messenger/ 下载 blabber.im, 这样只能安装到网页提供的 blabber.im 版本,不能及时更新 blabber.im。更推荐的做法是先下载 f-droid 的客户端,并通过 f-droid 客户端下载 blabber.im。首先前往 https://f-droid.org 下载安装 F-Droid 市场,然后更新包缓存,之后就可以搜索并安装 blabber.im 了,这样能及时更新 blabber.im。f-droid 是提供自由软件的自由的应用商店,强烈推荐在手机上安装一个。有余力的可以尝试使用 xabber 2.0.1 版本实现比较完整的 otr 功能。

对于苹果设备来说,iOS 系统上的 chatsecure 的 iOS 版勉强可用,macOS 也可暂且使用 Adium,可以从 https://adium.im 网站下载到。不过它们都不好用,往往会丢消息,只有越狱并设法禁止自动挂起网络才能彻底解决这个问题。烂苹果这个自诩比用户自己还懂用户的需求的暴君,通过一系列恶心的设计,把为 iOS 用户提供邦联化的即时通信服务变得难如登天,而这个工作本应仅仅需要一条持久 TCP 连接和客户端断线时重连。基本上想为 iOS 实现即时通信服务就必须在一定程度上放弃邦联化,开发者还必须接受烂苹果的盘剥才能保证其用户能及时收到消息,这使得 iOS 能用的即时通信服务基本上都是圆形监狱。因此最好的办法是换掉苹果设备。

三、注册XMPP账号

常使用的还是通过客户端直接注册。注册时需要选定一台服务器、填写用户名和密码后,就可以得到形式和电子邮件地址类似——“用户名@服务器”的身份标识——JID了。

电脑端的 pidgin 使用同一个界面来操作“创建新账号”和“添加现有账号”的功能,仅仅通过类似“在服务器上创建此账号”的选项来区分。

手机端的 blabber.im 可以在初次登录时,在登录界面的右下角点击“创建新帐号”,然后写上用户名,并通过“选择您的 jabber 提供商”来选择服务器。如果 blabber.im 默认提供的注册服务器没有您喜欢的,也可以选中“使用自己的服务器”,然后在填写用户名处以“用户名@服务器”的格式填写您需要的 JID 实现注册。密码需要在下一界面填写。

互联网上有很多开放的 XMPP 服务, 在正式尝试在服务器上注册帐号之前建议用 xmpp 观测站服务(https://xmpp.net/https://check.messaging.one/ )检查一下服务器的特性,然后顺着 xmpp 观测站服务提供的 xmpp 服务器官网链接在官网上注册。

不建议在少数几个服务器上扎堆,这样会丧失邦联制的优势,容易被针对封锁服务器,同时信息大规模泄漏的风险也会更大。

四、基本设置及登录使用

###(1)blabber.im 的使用

登录

初次登录时,在登录界面的右下角点击“我已有帐号”,然后输入 JID 和密码后点击下一步,昵称和头像设置可保持默认。登陆时如果失败,请检查JID是否完整,一个完整的JID应是 xxx@xxx,例如 [email protected] ,检查登录时是否正确输入。

设置

需要在“开始会话”界面(左上角会显示这四个字),点击右上角的三个竖点,找到“设置”。

blabber.im 设置中建议进行的操作有:

I.打开“专家模式”中的“启用多个账户”; II.打开“专家模式”中的“使用 DNSSEC 验证主机名”; III.关闭“安全和数据保护”中的“显示位置预览”; IV.打开“用户界面”里的“彩色名称显示对方状态”(如果不选择“隐藏联系人”)。

如果您已经“启用多个帐号”,那么点击右上角的三个竖点,会出现“管理账户”,在“管理账户”界面,点击右上角带“+”的小人进入一个新界面,以“用户名@服务器”的格式填写您需要的 JID ,输入您需要的密码,选中或不选中“在服务器上注册新账户”,可进行注册或者多用户登录。

(2)pidgin

pidgin 使用插件架构支持各种协议及其扩展,将插件文件(主体部分为动态链接库)放入插件所在的目录(pidgin 的安装目录下的一个叫 plugins 的子目录),重新启动程序,即可在“工具”菜单下的“插件”对话框中启用并配置。

使用pidgin之前,需要先安装两个插件:

OTR 插件

用于实现上文所述的 OTR 加密协议。

GNU/Linux 可可以在通过 GNU/Linux 发行版的包管理器下载安装 pidgin-otr 。

windows 可下载 https://otr.cypherpunks.ca/index.php#downloads 中的 https://otr.cypherpunks.ca/binaries/windows/pidgin-otr-4.0.2.zip ,并将其全部内容放入 pidgin 的插件目录,插件名为 Off-the-Record Messaging,有额外选项。

消息反馈插件

用于得知消息成功送达对方(以及成功解密,在使用 OTR时),启用后成功送达的消息后面会出现对勾。

遗憾的是 Debian 的软件源中并未收录 pidgin-xmpp-receipts 插件,最好的方法是通过源代码从头编译它。

先通过 GNU/Linux 发行版的包管理器下载安装 git,然后打开终端模拟器,输入$ git clone https://github.com/noonien-d/pidgin-xmpp-receipts获得 pidgin-xmpp-receipts 的源代码。之后输入$ cd pidgin-xmpp-receipts,进入源代码所在的目录。然后输入$cat README.md,会显示 pidgin-xmpp-recipts 的编译和安装流程:

pidgin-xmpp-receipts
====================


This pidgin-plugin implements xmpp message delivery receipts ([XEP-0184 v1.2](https://xmpp.org/extensions/xep-0184.html)).


When no delivering confirmation is displayed, it is also possible that the 
receiver doesn't support the extension.


Compiling
---------

To compile the plugin, run

>	$ make

You will need pidgin development packages
(link in ubuntu: libpurple-dev and pidgin-dev).


Installation
------------

To copy the extension to your personal plugin folder (~/.purple/plugins)
run:

>	$ make install

Now you may activate the extension within the pidgin settings.

认真阅读 READ.md ,严格按照它的提示进行安装操作。

对于 Debian GNU/Linux 用户来说,需要先检查是否安装了 libpurple-dev 和 pidgin-dev ,不安装它们后续的编译工作将无法完成。在确认安装了 libpurple-dev 和 pidgin-dev 的情况下,按照 READ.md 的操作,先输入$ make,后输入$ make install 即可完成 pidgin-xmpp-recipts 插件的安装操作。

当然也可从可信的渠道得到编译过的 pidgin-xmpp-recipts.so 二进制文件,将它放入 ~/.purple/plugins 中,注意 .purple 是隐藏目录。

windows 可下载 https://app.assembla.com/spaces/pidgin-xmpp-receipts/documents 中的 xmpp-receipts.dll 放入 pidgin 的插件目录即可,插件名为 XMPP Receipts,无额外选项。

pidgin 的登录

Pidgin 支持很多协议。如欲添加 xmpp 账号,请在“管理账号”对话框中点“添加”,“协议”选 xmpp、“用户名”填@之前的部分,“域”填@之后的部分,再输入密码。

注册新账号和添加已有账号靠下方的“在服务器上创建此账号”选项区分。

设置

强烈建议将账户配置的“高级”选项卡中的“连接安全性”选项设置为“需要加密”。并启用上述两个插件。

添加好友和聊天

在最基本的情况下,知道对方的 JID 就可以和对方用 XMPP 通信了,当然更方便的做法是将对方添加为自己的联系人。不过对方有可能不在线,因此你往往需要向对方提出申请,让他的客户端主动告知你他的在线状态(虽然大部分客户端都可以在将对方添加为联系人时自动向对方提出申请,同时自动向对方启用告知自身的在线状态,但还是有少数场景需要手动提出申请)。

聊天时,在 pidgin 上,请在开启 OTR 插件后,于聊天页面最上面一栏最右侧点击小人头像启动私密聊天。blabber.im 的 omemo 加密是默认开启的。

注意,pidgin 上的 OTR 启用后,默认的自动聊天记录归档会对该会话禁用(可通过插件的选项配置)。如仍需对该会话归档,请使用“对话”菜单中的“另存为”功能。

加密聊天建立后,还可以通过保密问题或直接验证指纹的方式对对方身份进行验证。