сокеты — Использование TLS в соединении Google Talk XMPP TCP с использованием переполнения стека

Я пытаюсь подключиться к серверу Google Talk XMPP с помощью PHP. Я успешно установил соединение и вошел в систему с помощью X-OAUTH2. Затем Google требует, чтобы я установил соединение TLS. Однако при попытке обновить соединение до TLS я получаю исключение: stream_socket_enable_crypto(): Peer certificate CN='gmail.com' did not match expected CN='talk.google.com',

Вот мои шаги:

$stream = stream_socket_client('tcp://talk.google.com:5222', $error_num, $error_str);
// ... I login,
//server tells me to use TLS,
//I tell it I am going to,
//it tells me to proceed ...
stream_socket_enable_crypto($stream, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);

И я получаю эту ошибку:

stream_socket_enable_crypto(): Peer certificate CN='gmail.com' did not match expected CN='talk.google.com'

Конечно, если я попытаюсь подключиться к серверу xmpp через tcp://gmail.com или же tcp://www.gmail.comэто не сработает.

Я также пытался установить TLS перед входом в систему (что, я бы предположил, является более безопасным способом сделать это), но я получаю ту же проблему. Вот и все рукопожатие до ошибки:

Me:     <stream:stream to="gmail.com" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" version="1.0">

Google: <stream:stream from="gmail.com" id="7373AF2152849B51" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client">
<stream:features>
<starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls">
<required/>
</starttls>
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
<mechanism>X-OAUTH2</mechanism>
<mechanism>X-GOOGLE-TOKEN</mechanism>
</mechanisms>
</stream:features>

Me:     <auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="X-OAUTH2" auth:service="oauth2" xmlns:auth="http://www.google.com/talk/protocol/auth">Encrypted user and pass</auth>

Google: <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>

Me:     <stream:stream to="gmail.com" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" version="1.0">

Google: <stream:stream from="gmail.com" id="B3A6AD05178A5BF2" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client">
<stream:features>
<starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls">
<required/>
</starttls>
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/>
<session xmlns="urn:ietf:params:xml:ns:xmpp-session"/>
</stream:features>

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

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

1

Решение

Я не понял, как решить проблему, но я мог бы избежать ее, подключившись через tls с самого начала и используя вместо этого порт 5223:

stream_socket_client('tls://talk.google.com:5223', $error_num, $error_str);
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]