Dave Cridland wrote:
* bidirectional s2s could be announced in <stream:features> sent
  right after the opening <stream> tag from the initiator.

Unidirectional S2S has been around for too long, I do not see a real
gain in fixing that now.

This was discussed in Feb 2004 on the XMPPWG list:
http://mail.jabber.org/pipermail/xmppwg/2004-February/002020.html
However, I have not seen bidirectional S2S in the last five years
and 3920bis (4.4) includes the consensus (?) that s2s is
unidirectional.


*nods* Indeed. I think we've reached the point where we need signalling to enable it. And I defintiely think we need to enable it.

Why need?

There is a potential for problems here, such as servers which are not
reconnectible. But that is a problem with EXTERNAL already, where you
can send messages without being able to receive any.

* connection reuse for multiple s2s links would be a very useful
  feature, ask Dave for details
Piggybacking.

Which is subtly broken in RFC 3920 - at least 50% of it.
<host-unknown/> makes 'target piggybacking' (different to)
unusable, as you risk the entire stream.


*nods* Agreed.

Luckily the last version of 220 already introduced the way to fix
that - without actually solving the problem :-)

What I'd like to do here is use the dialback elements as an authorization request mechanism.

Dialback is 50% authorization request, 50% key verification.
Splitting it up accordingly simplifies the description.


Yes, I think so too. In fact, we can elide the actual key if we know the receiver won't ever use it.

I think sending the key always is the easier way, being more-or-less
backward compatible.

In fact, by specifying how to do this without actually doing dialbacks, but instead by verifying the identity of the sender based on the X.509 cert, we can actually get rid of SASL EXTERNAL and just use X.509 only, which eliminates the difference between the "first" authorization and subsequent ones.

There is no 'subsequent' auth with 0178 yet, is there?
There are three different options:
1) do 0178 and add subsequent auth (including graceful failure)
2) do 0178 for the first authorization and use piggybacking (with
   graceful failure again) for subsequent authorization... err...
   verification
3) ignore any 0178 offers and do piggybacking for everything.
   Might be a problem if servers require 0178 and really mean it.


I'm thinking we aim for (3), with signalling as required.

*nod*
Might be a problem if a server requires EXTERNAL, but this is rare in
uncontrolled environments anyway.

That would make 0178 c2s-only and it could be merged with 0257 somehow.

The dialback flow then becomes:

1) O2R : <db:result/>
2) R: If TLS, and X.509 cert matches requested domain, goto ACCEPT

Assumes that the originating server does not check with the
authoritative server that the receiving server has verified
the key.


Right - I don't expect this to be the case - I don't see what the point would be - but I've not had the time to try this optimization out in the field, yet.

"You're telling me the key is valid without checking it? Then you must
be lying."
I think dialback was not designed to protect from that anyway.

3) R: Connect to A
4) R2A: Establish TLS.
5) R2A: If A's certificate matches O's, goto ACCEPT

Nice optimization ;-)


It saves a round-trip or two.

6) R2A: <db:verify/>
7) A2R: <db:verify/>, goto ACCEPT
ACCEPT:
8) R2O: Authorize O as requested domain, send <db:result/>

Here's a question - if there is TLS involved (thus IP spoofing is, as I udnerstand things, impossible), and the SRV records include the originator, can we also elide the R2A session entirely?

There are two problems with that approach:
1) you do not know if the remote server is up and listening for
   connections. See above.
2) an evil user on the remote system (other than the user who is
   running the jabber server) who is able to open connection to
   remote servers.

I do not think (2) is a real problem, especially not when certificates
are used.

Philipp

Reply via email to