update page now

Domaines Internet : TCP, UDP, SSL et TLS

ssl://, tls://, sslv2:// & sslv3://.

Note: Les transports sslv2:// et sslv3:// sont obsolètes et ne devraient pas être utilisés. Ils ne sont documentés que pour des raisons de rétrocompatibilité.

Note: Si aucun transport n'est spécifié, tcp:// est utilisé.

  • 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
  • tls://www.example.com

Les sockets du domaine Internet utilisent un numéro de port en plus de l'adresse de l'hôte. Dans le cas de fsockopen(), il est spécifié en deuxième paramètre et, donc, n'a pas d'impact sur le format du mode de transport. Avec stream_socket_client() et les autres fonctions de la même famille, le numéro de port est spécifié comme un suffixe dans l'URL de transport, identifié par le signe deux-points.

  • tcp://127.0.0.1:80
  • tcp://[fe80::1]:80
  • tcp://www.example.com:80

Note: Adresse IPv6 et numéro de port
Dans le deuxième exemple ci-dessus, les exemples en IPv4 et les noms d'hôtes sont identiques, mais les IPv6 sont placées entre crochets, en plus d'avoir les deux-points et le numéro de port : [fe80::1]. Cela permet de distinguer les deux-points utilisés en IPv6 et le deux-points utilisés pour délimiter le numéro de port.

Les modes ssl:// et tls:// (disponibles uniquement lorsque le support OpenSSL est compilé avec PHP) sont des extensions de tcp:// qui incluent le chiffrement SSL.

ssl:// tente de négocier une connexion SSL/TLS sécurisée en fonction des capacités et des préférences du client et de l'hôte distant. Les protocoles effectivement utilisés sont déterminés par la configuration d'OpenSSL et par les options fournies via stream_context_create(), telles que ssl.crypto_method.

Les protocoles SSLv2 et SSLv3 sont obsolètes et non sécurisés. Leur utilisation est fortement déconseillée et ils ne sont plus activés par défaut dans les versions modernes de PHP et d'OpenSSL.

add a note

User Contributed Notes 2 notes

up
16
christian at lantian dot eu
12 years ago
@pablo dot livardo  :  I think that the problem you found is caused by the difference between the client/server encryption methods used.

The 465 port is used for SMTPS, and the server starts the encryption immediately it receives your connection. So, your code will work.

The 587 port is used for Submission (MSA or Mail Submission Agent) which works like the port 25. The server accepts your connection and doesn't activate the encryption. If you want an encrypted connection on the port 587, you must connect on it without encryption, you must start to dialog with the server (with EHLO) and after that you must ask the server to start the encrypted connection using the STARTTLS command. The server starts the encryption and now you can start as well the encryption on your client. 

So, in few words, you can not use : 

<?php $fp = fsockopen("tls://mail.example.com", 587, $errno, $errstr);  ?>  

but you can use:

 <?php $fp = stream_socket_client("mail.example.com:587", $errno, $errstr); ?>  

and after you send the STARTTLS command, you can enable the crypto:

<?php stream_socket_enable_crypto($fp, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT); ?>

P.S. My previous note on this page was totally wrong, so I ask the php.net admin to remove it.

:)
up
5
stefan at example dot com
15 years ago
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 .
To Top