我正在尝试构建一个带有OMEMO加密的MUC平台,以便在Android应用程序上使用。我正在使用Ejabberd (v17.11)和Smack库(v4.2.1)。
persistent机房是allow_subscription,用于Muc/Sub支持,用于脱机消息。
当客户以“所有者”的身份启动一个新房间,并从他的名册中添加“成员的名单”时,所有的客户都会加入这个房间,一切看起来都很好。业主可以向小组发送信息,然后发送给每个成员。
但是当一个组成员试图发送一条消息时,如果他不‘’这个组的所有成员(如果他们不在他的名册中),他就不能发送消息!
我发现,当向小组发送OMEMO消息时,有必要对每个成员的消息分别加密,这就需要得到每个成员的devicelist!
在这一步中:
mOmemoManager.encrypt(muc, msgBody);它试图对所有收件人进行加密,但是获取未知用户的设备列表会导致崩溃。
发送:
<iq to='unknownuser@server.com' id='141' type='get'><query xmlns='http://jabber.org/protocol/disco#info' node='eu.siacs.conversations.axolotl.devicelist'></query></iq>RECV:
<iq xml:lang='en' to='myuser@server.com/mobile' from='unknownuser@server.com' type='error' id='141'><query node='eu.siacs.conversations.axolotl.devicelist' xmlns='http://jabber.org/protocol/disco#info'/><error code='407' type='auth'><subscription-required xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/><text xml:lang='en' xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'>Not subscribed</text></error></iq>Smack的错误:
无法获取unknownuser@server.com的设备列表:. XMPPError:订阅-必需- auth
那我怎么才能解决这个问题?在聊天组中,每个用户都不必见面。当每个人聚在一起的时候,我应该把每个人都加到一个人的名册上吗?
或者这是关于房间的附属关系还是角色?
或者是关于Ejabberd配置的东西?
[{title,<<"groupName">>},
{allow_query_users,true},
{allow_private_messages,true},
{allow_private_messages_from_visitors,anyone},
{allow_visitor_status,true},
{allow_visitor_nickchange,true},
{public,false},
{public_list,false},
{persistent,true},
{moderated,true},
{members_by_default,true},
{members_only,true},
{allow_user_invites,true},
{anonymous,false},
{logging,false},
{allow_voice_requests,true},
{allow_subscription,true},
{mam,true},
{presence_broadcast,[moderator,participant,visitor]},
{voice_request_min_interval,1800},
{vcard,<<>>},
{captcha_whitelist,[]},
{affiliations,[{{<<"user1">>,<<"server.com">>,<<>>},{member,<<>>}}, {{<<"user2">>,<<"server.com">>,<<>>},{owner,<<>>}}, {{<<"user3">>,<<"server.com">>,<<>>},{member,<<>>}}]},
{subject,[]},
{subject_author,<<>>}]发布于 2019-03-04 22:47:21
OMEMO要求发送方能够读取收件人OMEMO公共子节点。这对于获取接收方preKey包来构建会话是必要的。
现代实现将OMEMO节点配置为公共的--还有一个ejabberd配置来强制遗留客户端这样做。
因此,OMEMO的大多数客户端实现都将加密功能限制为仅在私有组聊天中可用。在这种情况下,所有联系人都在彼此的名册中,并且可以相互访问OMEMO节点。加密公开可用的组聊天是没有意义的,因为攻击者只需加入聊天就可以读取消息。
如果您想从您的客户端中将您的OMEMO节点配置为公共节点,请查看smack-openpgp确实改变了访问模型。是如何实现的。
https://stackoverflow.com/questions/49004845
复制相似问题