2015-04-09 4 views
1

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

Вот мои шаги:

$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"/> 

ответ

2

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^