2016-11-29 31 views
8

sendm.cert.legalmail.it465ポートで接続しようとしましたが、それはイタリアのPECと呼ばれるSMTPSサービスです。PHPハンドシェイクが失敗しました

<?php 
fsockopen('tls://sendm.cert.legalmail.it', 465); 

すべて私がOpenSSL 1.0.2jにアップグレードした場合、それは、このスニペットは、このエラーで失敗し、OpenSSL 1.0.2hで大丈夫です::だからと

PHP Warning: fsockopen(): SSL operation failed with code 1. OpenSSL Error messages: 
    error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure in ~/Development/experimental/php-handshake/connect.php on line 3 
    PHP Warning: fsockopen(): Failed to enable crypto in ~/Development/experimental/php-handshake/connect.php on line 3 
    PHP Warning: fsockopen(): unable to connect to tls://sendm.cert.legalmail.it:465 (Unknown error) in ~/Development/experimental/php-handshake/connect.php on line 3 

私はこのスニペットの仕事をしようとしているPHPのいずれかのバージョンで

OpenSSL 1.0.2j私はコマンドライン経由で接続しようとしています:

openssl s_client -connect sendm.cert.legalmail.it:465 

それは完全に動作します。

私はtestsslこれで、サーバー上でSSLをチェックしてみてくださいダンプ(剥奪)です:

SSLv2    not offered (OK) 
SSLv3    not offered (OK) 
TLS 1    offered 
TLS 1.1    not offered 
TLS 1.2    not offered 
Version tolerance downgraded to TLSv1.0 (OK) 

のみTLS 1が下盛ですが、私はこのURIとTLS1に握手を強制しよう:'tlsv1.0:://sendm.cert.legalmail.it'しかし結果は同じ。

私はUbuntu 16.04でPHP5.6とPHP7.1でテストしています。

バグはどこですか? opensslで? PHPで?サーバーハンドシェイクで?

更新私はOpenSSL 1.0.2jリターンで./testssl.sh -E sendm.cert.legalmail.it:465で常にchiperを見れば:バージョンOpenSSL 1.0.2h

x05  RC4-SHA       RSA  RC4  128  
x04  RC4-MD5       RSA  RC4  128  
x16  EDH-RSA-DES-CBC3-SHA    DH 1024 3DES  168  
x0a  DES-CBC3-SHA      RSA  3DES  168 

とPHPのconst OPENSSL_DEFAULT_STREAM_CIPHERS

x05  RC4-SHA       RSA  RC4  128  TLS_RSA_WITH_RC4_128_SHA       
x04  RC4-MD5       RSA  RC4  128  TLS_RSA_WITH_RC4_128_MD5       
x16  EDH-RSA-DES-CBC3-SHA    DH 1024 3DES  168  TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA     
x0a  DES-CBC3-SHA      RSA  3DES  168  TLS_RSA_WITH_3DES_EDE_CBC_SHA      
x15  EDH-RSA-DES-CBC-SHA    DH 1024 DES  56  TLS_DHE_RSA_WITH_DES_CBC_SHA      
x09  DES-CBC-SHA      RSA  DES  56  TLS_RSA_WITH_DES_CBC_SHA       
x14  EXP-EDH-RSA-DES-CBC-SHA   DH(512) DES  40,exp TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA    
x08  EXP-DES-CBC-SHA     RSA(512) DES  40,exp TLS_RSA_EXPORT_WITH_DES40_CBC_SHA     
x06  EXP-RC2-CBC-MD5     RSA(512) RC2  40,exp TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5     
x03  EXP-RC4-MD5      RSA(512) RC4  40,exp TLS_RSA_EXPORT_WITH_RC4_40_MD5  

それに含まれるすべてのversione同じaccrossです。

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 

答えて

2

PHPは、このコマンドを使用して、opensslのためのデフォルトのクエリが含まれてOPENSSL_DEFAULT_STREAM_CIPHERSがあります

openssl ciphers -v `php -r 'echo OPENSSL_DEFAULT_STREAM_CIPHERS;'` 

私はPHPがインストールされたOpenSSLの現在のバージョンで扱うことができるすべての暗号を取得します。

  1. EDH-RSA-DES-CBC3-SHA
  2. DES-CBC3-SHA

ので、デフォルトではPHPが正しく接続を処理することはできません。

1.0.2h1.0.2j間で同じクエリが異なる暗号はこれらのドロップのサポートをリスト返しますしかし、もし私がこの暗号で$contextを強制すると、接続は行われます:

$context = stream_context_create(
    [ 
     'ssl' => [ 
      'ciphers' => 'EDH-RSA-DES-CBC3-SHA:DES-CBC3-SHA', 
     ], 
    ] 
); 

$fp = stream_socket_client(
    'tls://sendm.cert.legalmail.it:465', 
    $errno, 
    $errstr, 
    30, 
    STREAM_CLIENT_CONNECT, 
    $context 
); 
0

編集答えは完全に:これはおそらくfsockだけでなく、カールの原因である、ここでHTTPS and SSL3_GET_SERVER_CERTIFICATE:certificate verify failed, CA is OK

の答えを見てください。 彼の質問はwindows/xamppですが、OSをアップグレードした人がphp.iniを新しいバージョンとマージしていないと思います。

+0

この質問は証明書の検証ではなく、ハンドシェイクで失敗します。 – Cronos

0

他のすべての人に同じ問題が発生している:Legalmail TLSサーバーがTLSv1.2をサポートしているように見えるため、これ以上問題はありません。

関連する問題