web-dev-qa-db-ja.com

PHP SSLv3からTLSへのcURLリクエスト..?

SSLv3で発見された最近の脆弱性 のため、多くのWebサービスプロバイダー(Paypal、Facebook、Googleなど)はそれを無効にし、代わりにTLSを使用することを望んでいます。これを行う方法を理解するのに少し問題があります。

現在、次の関数を使用してcURLリクエストを処理しています。

function CURLRequest($Request = "", $APIName = "", $APIOperation = "", $PrintHeaders = false)
{
    $curl = curl_init();
            curl_setopt($curl, CURLOPT_VERBOSE, 1);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($curl, CURLOPT_TIMEOUT, 30);
            curl_setopt($curl, CURLOPT_URL, $this->EndPointURL);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $Request);

    if($this->APIMode == 'Certificate')
    {
        curl_setopt($curl, CURLOPT_SSLCERT, $this->PathToCertKeyPEM);
    }

    $Response = curl_exec($curl);

    /*
     * If a cURL error occurs, output it for review.
     */
    if($this->Sandbox)
    {
        if(curl_error($curl))
        {
            echo curl_error($curl).'<br /><br />';  
        }
    }

    curl_close($curl);
    return $Response;   
}

しかし、Paypalのサンドボックスをヒットしようとすると、すでにこれが無効になっているため、cURLエラーが発生します:error:14077410:SSLroutines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

私が見つけた情報は、SSLの代わりにTLSを使用するようにこれを変更する必要があるということです、そして私が見た他の答えは私の関数にcurlオプションを追加することによってそれを単に行うと言っています...

curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);

ただし、そのオプションを追加しても、まったく同じ結果が得られます。これを機能させる方法についての情報をいただければ幸いです。ありがとう!

8
Drew Angell

コピー元: SSLエラーはTLSに変更できません

コードにcurl_setopt($curl, CURLOPT_SSL_CIPHER_LIST, 'TLSv1');を追加してみてください。

これは、cURLがOpenSSLlibsslベースの場合は機能しますが、nssの場合は機能しません。ベース。

4
philippe lhardy

PaypalがコアSDKを更新するまでのより良い解決策は、アプリケーションでCURLOPT_SSL_CIPHER_LISTを直接オーバーライドすることです。このようにして、sdk-core-phpパッケージに直接干渉する必要はなく、将来的には自由にアップグレードできます。

アプリのbootstrapまたは支払い処理ロジックに次のようなものを追加できます:

PPHttpConfig::$DEFAULT_CURL_OPTS[CURLOPT_SSL_CIPHER_LIST] = 'TLSv1';

必ず完全にコメントし、後で問題がコアにパッチされたときに削除することを忘れないでください。

4

上記で問題が解決しない場合は、OPENSSLのバージョンを確認してください。 OPENSSLバージョン<= 0.9.8が原因である可能性があります。 PHP7に更新すると、より高いバージョンのOPENSSLが付属します。

0
burgur

ターミナル経由でnssライブラリを更新することを解決しました。

0
Luca Murante