Actually, PHP is very able to start with an unencrypted connection and then switch to an encrypted one - refer to http://php.net/stream_socket_enable_crypto .
Internet Domain: TCP, UDP, SSL, e TLS
PHP 4, PHP 5, PHP 6. ssl:// & tls:// desde o PHP 4.3.0 sslv2:// & sslv3:// desde o PHP 5.0.2
Nota: Se nenhum transporte for especificado, tcp:// será usado.
- 127.0.0.1
- fe80::1
- www.example.com
- tcp://127.0.0.1
- tcp://fe80::1
- tcp://www.example.com
- udp://www.example.com
- ssl://www.example.com
- sslv2://www.example.com
- sslv3://www.example.com
- tls://www.example.com
Sockets no Domínio Internet esperam um número de porta além do endereço desejado. No caso de fsockopen(), esta é especificada no segundo parâmetro e, portanto, não afeta a formatação da URL. Com stream_socket_client() e funções relacionadas como com as URLs tradicionais, no entanto, o número da porta é especificado como um sufixo à URL delimitada por dois-pontos.
- tcp://127.0.0.1:80
- tcp://[fe80::1]:80
- tcp://www.example.com:80
Nota: Endereços númericos com número de porta em IPv6
No segundo exemplo acima, enquanto os exemplos em IPv4 e nome de host permaneceram iguais, exceto pela adição do dois-pontos e número da porta, o endereço em IPv6 é envolto em colchetes: [fe80::1]. Isso é para destinguir entre os dois pontos de um endereço IPv6 e como separador de porta no IPv4.
Os transportes ssl:// e tls:// (disponíveis apenas quando o suporte a openssl é compilado no PHP) são extensões do transporte tcp:// que incluem encriptação SSL. Desde o PHP 4.3.0, suporte a OpenSSL deve ser compilado estaticamente no PHP, no PHP 5.0.0 ele pode ser compilado como um módulo ou estaticamente.
ssl:// tentará negociar uma conexão SSL V2 ou SSL V3, dependendo das capacidades e preferências do host remoto. sslv2:// e sslv3:// selecionará o protocolo de maneira explícita.
I've been having a problem with a TLS connection.
<?php
$fp = fsockopen("tls://mail.example.com", 587, $errno, $errstr);
?>
Which gives me an error of:
SSL operation failed with code 1. OpenSSL Error messages: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
I believe this is caused by PHP not being able to start with an unencrypted connection and then switch to encryption even though the functionality is built into OpenSSL.
For Google Mail users you can avoid this by using port 465 instead of 587.
