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).