RFC: 3920
Оригинал: Extensible Messaging and Presence Protocol (XMPP): Core
Другие версии: RFC 6120
Категория: Предложенный стандарт
Дата публикации:
Автор:
Перевод: Семенов Юрий Алексеевич

5.3. Пример клиент-сервер

Следующий пример показывает поток данных с обеспечением безопасности потока посредством STARTTLS (заметим: альтернативные шаги, показанные ниже, выполнены для иллюстрации протокола в случае сбоя (неудачи), они не являются исчерпывающими и не обязательно будут реализованы при пересылке данных в данном примере).

Шаг 1: Клиент формирует поток к серверу:

<stream:stream
   xmlns='jabber:client'
   xmlns:stream='http://etherx.jabber.org/streams'
   to='example.com'
   version='1.0'>

Шаг 2: Сервер откликается посылкой тэга потока клиенту:

<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    id='c2s_123'
    from='example.com'
    version='1.0'>

Шаг 3: Сервер посылает клиенту расширение STARTTLS и данные о механизме аутентификации и других особенностях потока:

<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>PLAIN</mechanism>
  </mechanisms>
</stream:features>

Шаг 4: Клиент посылает серверу команду STARTTLS:

<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>

Шаг 5: Сервер информирует клиента о том, что он может продолжить работу:

<proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>

Шаг 5 (alt): Сервер информирует клиента, что согласование TLS не состоялось и следует прервать поток и разорвать TCP-соединение:

<failure xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
</stream:stream>

Шаг 6: Клиент и сервер пытаются завершить согласование применения TLS через существующее TCP-соединение.

Шаг 7: Если согласование TLS успешно, клиент формирует новый поток к серверу:

<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    to='example.com'
    version='1.0'>

Шаг 7 (alt): Если согласование TLS не получилось, сервер закрывает TCP-соединение.

Шаг 8: Сервер реагирует посылкой клиенту заголовка потока и любых характеристик потока:

<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    from='example.com'
    id='c2s_234'
    version='1.0'>
<stream:features>
  <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
    <mechanism>DIGEST-MD5</mechanism>
    <mechanism>PLAIN</mechanism>
    <mechanism>EXTERNAL</mechanism>
  </mechanisms>
</stream:features>

Шаг 9: Клиент продолжает согласование SASL (раздел 6).

2007 - 2017 © Русские переводы RFC, IETF, ISOC.