2

コハナのローカルホスト環境でHTTPSを使用しようとしていますが、次のエラーがスローされ続けます。これを修正する方法を知っている人はいますか?

Request_Exception [ 0 ]: Error fetching remote /protected/someFunctionCall.json [ status 0 ] SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

私は次のような投稿リクエストで構築しています:

$url = "https://www.foobar.com:18443";          
$data = http_build_query($params);

// This uses POST - http://kohanaframework.org/3.2/guide/kohana/requests#external-requests
$request = Request::factory($url)
        ->method(Request::POST)
        ->body($data)
        ->headers('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');

$response = $request->execute();

このガイドに従って、OpenSSLを使用して自己署名証明書を生成しました。

(Simonの回答):ローカルホストでApacheにHTTPSを許可するにはどうすればよいですか?

4

1 に答える 1

4

SSLクライアントが信頼しない自己署名証明書を使用しているため、このエラーが発生する可能性があります。私はKohanaやPHPに精通していませんが、クライアントはおそらく内部でopensslを使用していると思います。どこかに、トラストアンカーを保持するcacerts.pemやca-bundle.crtのようなファイルがあるはずです。これらのトラストアンカーは、クライアントソフトウェアが信頼するCA証明書です。サーバーがこれらのCAのいずれかから発行された証明書を使用している場合、エラーは発生しません。試すことができるのは、自己署名サーバー証明書をCA証明書ファイル(例:cacerts.pem)の最後に追加することです。証明書を追加するときは、証明書がPEM形式であることを確認してください。PEM形式の証明書は、次の行で区切られます。

  • -----BEGIN CERTIFICATE-----

  • -----END CERTIFICATE-----

または、サーバー証明書を受け入れるようにクライアントに指示するオプションがある場合もあります。良いセキュリティ慣行ではありませんが、自分で試してみれば一時的な解決策としては問題ありません。たとえば、cURLには、これを行うオプションがあります。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

cURLでの正しいアプローチは、トラストアンカーを保持するファイルを指定することです。このコードスニペットは、以下にリンクしている記事に基づいています。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/CAcerts/MyTrustedCerts.crt")

CURLOPT_CAINFOを使用すると、トラストアンカーを保持しているファイルの名前を指定できます。このファイルには、クライアントソフトウェアがサーバー証明書の検証に使用する1つ以上の証明書が含まれている必要があります。

また、CURLOPT_SSL_VERIFYHOSTを2に設定すると、cURLに共通名の存在を確認し、指定されたホスト名と一致することを確認するように指示します。実稼働環境では、このオプションの値を2(デフォルト値)に保つ必要があります。

この記事PHPでcURLを使用してHTTPS(SSL / TLS)で保護されたサイトにアクセスするには、PHPでcURLを使用する場合のこのエラーの回避策/修正がいくつかあります。

于 2012-03-21T16:41:11.190 に答える