CakePHP3.x系でHttp Client で通信をしようとしてSSL使いたくないよって言ったらハマったこと


Cake3に用意されてるHttp Clientのクラスを使ってAPIとの通信をしようと考えていました。

設定はこんな感じで〜って言われて、
任せろみたいなことを言いました。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

初めてだったのでここで見ながら書き換えて
PHP マニュアル cURL 関数
http://php.net/manual/ja/function.curl-setopt.php

こんな感じに書きました!(失敗作)

失敗

   $option = [
        'timeout'              => 5,
        'ssl_verify_peer'      => false,
        'ssl_verify_host' => false,
        'auth' => [
            'username' => 'username',
            'password' => 'password',
        ]
    ];
    $http = new Client($option);
    $url = 'ponpon.com';
    $request = ['animal'=>'tanuki'];
    $response = $http->post($url, $request, $option);

ずっとSSL通信でfopen(): Peer certificateってでる…これfalseしたでしょ…
なんでだろうってコード見に行ったら「ssl_verify_peer_name」がデフォルトでtrueになってました。

……「ssl_verify_peer」がfalseでも「ssl_verify_peer_name」はtrueに…そうか…わかった…
'ssl_verify_peer_name' => falseの記述増そう。。。

成功

   $option = [
        'timeout'              => 5,
        'ssl_verify_peer'      => false,
        'ssl_verify_peer_name' => false,
        'ssl_verify_host' => false,
        'auth' => [
            'username' => 'username',
            'password' => 'password',
        ]
    ];
    $http = new Client($option);
    $url = 'ponpon.com';
    $request = ['animal'=>'tanuki'];
    $response = $http->post($url, $request, $option);

これで動きました。