Php5.6.31-1~dotdeb+7.1 fsockopen : cypher non à jour

Tags: #<Tag:0x00007f63f10db5b8>

Bonjour,

Je suis sur une Debian 7 avec dotdeb pour PHP5.6

Mais il semble que la liste des cypher ne correspondent pas à ce qui devrait être, et donc même si le serveur en face est OK au niveau config : cela échoue.

$ php -v
PHP 5.6.31-1~dotdeb+7.1 (cli) (built: Jul 11 2017 06:53:16) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

Résultat de

<?php
$ctx = stream_context_create(['ssl' => [
    'capture_session_meta' => TRUE
]]);
 
$html = file_get_contents('https://framagit.org', FALSE, $ctx);
$meta = stream_context_get_options($ctx)['ssl']['session_meta'];
var_dump($meta);

array(4) {
  ["protocol"]=>
  string(7) "TLSv1.2"
  ["cipher_name"]=>
  string(27) "ECDHE-RSA-AES256-GCM-SHA384"
  ["cipher_bits"]=>
  int(256)
  ["cipher_version"]=>
  string(11) "TLSv1/SSLv3"
}

Selon la doc de PHP la liste des cypher devrait être celle de Mozilla. Ou ECDHE-RSA-AES256-GCM-SHA384 est bien présent.

Par contre : rien à faire
la commande $f = fsockopen("tls://framagit.org", 443); me produit toujours

PHP Warning:  fsockopen(): SSL: Connection reset by peer in /home/shnoulle.net/bin/testcypher.php on line 13
PHP Warning:  fsockopen(): Failed to enable crypto in /home/shnoulle.net/bin/testcypher.php on line 13
PHP Warning:  fsockopen(): unable to connect to tls://framagit.org:443 (Unknown error) in /home/shnoulle.net/bin/testframagit.php on line 2

Pour OPENSSL_DEFAULT_STREAM_CIPHERS c’est à :

ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:HIGH:!SSLv2:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!RC4:!ADH

Et donc, cela semble être OK.

Une idée ? C’est pas du à Let’s encrypt puisque d’autres site sur LE fonctionne bien. Je ne vois donc que le manque du cypher.

Mais je vois pas trop comment, dela bonne façon, mettre à jour cette satanée liste …

Merci :slight_smile:

la liste que tu as mis dans Apache ?

? C’est à dire ? http://docs.php.net/manual/en/migration56.openssl.php : la liste des cypher est dans la constante OPENSSL_DEFAULT_STREAM_CIPHERS .
Mais je ne vois pas comment la mettre à jour ?

En fait, je devrais pouvoir passer par stream_context_create pour créer la connexion avec le cypher voulu. Cependant, j’essaye de voir avant si une autre solution existe puisque wget fonctionne.

Mais peut être que c’est openssl qui passe pas ici …

$ openssl s_client -host framagit.org -port 443
CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = framagit.org
verify return:1
---
Certificate chain
 0 s:/CN=framagit.org
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIF+zCCBOOgAwIBAgISBAg+cTfy1n2LRdX2w626fd7zMA0GCSqGSIb3DQEBCwUA
[CUT]
-----END CERTIFICATE-----
subject=/CN=framagit.org
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
---
No client certificate CA names sent
---
SSL handshake has read 3643 bytes and written 416 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 4096 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: 1117C80BD00234203CB988A0937D21A37A3A786D11456C8EDE29699E9D2AA2BB
    Session-ID-ctx: 
    Master-Key: 585C8229D486DA13364A044B7AFB4BF0965F84BA84E1E9BE76712388264750C06EB46D9CF513F125D5B60111D230C659
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - fb 13 8f 5a 29 f9 55 a9-26 a5 bc 72 ba 19 71 9e   ...Z).U.&..r..q.
    [CUT]

    Start Time: 1508000813
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

read:errno=0

(read:errno=0 au final )

Par contre:

$ openssl s_client -host belar.gsill.net -port 443
CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = belar.gsill.net
verify return:1
---
Certificate chain
 0 s:/CN=belar.gsill.net
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
 1 s:/CN=belar.gsill.net
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
 2 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIFATCCA+mgAwIBAgISBDhTOTluujBUGCBf5jITCmZRMA0GCSqGSIb3DQEBCwUA
[CUT]
-----END CERTIFICATE-----
subject=/CN=belar.gsill.net
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
---
No client certificate CA names sent
---
SSL handshake has read 4441 bytes and written 416 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: BE5CD1F35C40E3A900C79F4F6462761F6C3769FE536E57367660913B69D2773B
    Session-ID-ctx: 
    Master-Key: C5F70F7314E59512889546C1A275DE3D46B10B50A0E4768037A9EC1884DF167CB076AC08C8B90B1AEE0853503687BC98
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - a7 df 5a 30 01 6f 5f 3f-10 67 46 b5 c2 5f 5e b9   ..Z0.o_?.gF.._^.
    [CUT]

    Start Time: 1508001209
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
closed

(closed au final)

:confused:

si tu as une vieille version de openssl il ne prend peut être pas en compte certain élément de la liste
avec ta vieille debian t’es au max de la version dispo de openssl ?

Il me semble

# openssl version
OpenSSL 1.0.1t  3 May 2016

La seule différence entre le poste local (en OpenSSL 1.1) et le serveur avec le test en openssl direct : c’est la fin read:errno=0 contre closed.

la oldstable est aussi sou 1.0.1 selon https://packages.debian.org/fr/jessie/openssl . Ne reste-t-il que à passer à stretch … bon, je dois changer de serveur aussi (investir en sous et en temps …).