5.4. Пример сервер-сервер
Следующий пример показывает поток данных для двух серверов, обеспечивающих безопасность с помощью STARTTLS (заметим: альтернативные шаги, показанные ниже, приведены для иллюстрации работы протокола в случаях сбоев; они не являются обязательными).
Шаг 1: Сервер1 инициирует поток в серверу2:
<stream:stream
xmlns='jabber:server'
xmlns:stream='http://etherx.jabber.org/streams'
to='example.com'
version='1.0'>
Шаг 2: Сервер2 откликается посылкой тэга потока Серверу1:
<stream:stream
xmlns='jabber:server'
xmlns:stream='http://etherx.jabber.org/streams'
from='example.com'
id='s2s_123'
version='1.0'>
Шаг 3: Сервер2 посылает расширение STARTTLS Серверу1 вместе с данными о механизме аутентификации и любыми другими возможностями потока:
<stream:features>
<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'>
<required/>
</starttls>
<mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
<mechanism>DIGEST-MD5</mechanism>
<mechanism>KERBEROS_V4</mechanism>
</mechanisms>
</stream:features>
Шаг 4: Сервер1 посылает команду STARTTLS Серверу2:
<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
Шаг 5: Сервер2 информирует Сервер1 о том, что он может продолжать работу:
<proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
Шаг 5 (alt): Сервер2 информирует Сервер1 о том, что согласование применения TLS не прошло и поток закрывается:
<failure xmlns='urn:ietf:params:xml:ns:xmpp-tls'/> </stream:stream>
Шаг 6: Сервер1 и Сервер2 пытаются завершить согласование применения TLS через TCP.
Шаг 7: Если согласование TLS прошло успешно, Сервер1 формирует новый поток к Серверу2:
<stream:stream
xmlns='jabber:server'
xmlns:stream='http://etherx.jabber.org/streams'
to='example.com'
version='1.0'>
Шаг 7 (alt): Если согласование TLS не прошло, Сервер2 закрывает TCP-соединение.
Шаг 8: Сервер2 откликается посылкой заголовка потока Серверу1 вместе с данными о доступных возможностях потока:
<stream:stream
xmlns='jabber:server'
xmlns:stream='http://etherx.jabber.org/streams'
from='example.com'
id='s2s_234'
version='1.0'>
<stream:features>
<mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
<mechanism>DIGEST-MD5</mechanism>
<mechanism>KERBEROS_V4</mechanism>
<mechanism>EXTERNAL</mechanism>
</mechanisms>
</stream:features>
Шаг 9: Сервер1 продолжает согласование применения SASL (раздел 6).