1. ホーム
  2. php

[解決済み] 私のOS/PHPでCURLOPT_SSL_VERIFYHOST = 2のサポートを有効にする方法

2022-02-18 06:33:59

質問

セントレジスド・サインオンの認証を行うサイトをローカルで開発しています。 その手順の1つに、アクセストークンを取得するためにhttpsのリソースにcurlリクエストをすることが必要です。

curlの設定の一部を紹介します。

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);                                         
    //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

見ての通り、CURLOPT_SSL_VERIFYHOSTオプションをコメントアウトしています。 私はphp.netや様々なブログ/stackoverflowで読みました( CURLOPT_SSL_VERIFYHOST (libcurl/openssl) を無効にすることによるセキュリティ上の影響 これらのオプションが意味するものは何ですか?

私の開発マシンでは CURLOPT_SSL_VERIFYHOST 2 は正常に動作しています。 私は、ubuntu 12.04 の php5 パッケージで提供される vanilla php インストールと php5-curl を使っているだけです。

本番環境(Rackspace cloudsites)では CURLOPT_SSL_VERIFYHOST 2 が機能しないので、これが問題であることを確認するために false に変更したのです。私のローカルホストでこれを有効にするために明示的に何もしなかったので、どのディレクティブ/設定オプションがこれを制御しているのかわかりません。

動作しないとはどういう意味かというと、本番環境では、curl呼び出しが、"quot;not working" "を返すということです。 http_code0 を使用すると VERIFYHOST が設定されています。 2 . に設定すると FALSE のステータスコードを返しています。 200

質問です。

を有効にするには、どうすればよいのでしょうか? SSL_VERIFYHOST を使用しています。

何かお手伝いいただけると助かります。 ありがとうございます。

解決方法は?

2」については、SSL証明書のコモンネームが、利用するホスト名と一致することを確認する必要があります。これはデフォルトで、SSL証明書が使用するホスト名(コモンネーム)に対して適切に作成されていれば、簡単にできるはずです。

PHP curl_setopt マニュアルより。

1は、SSLピア証明書のコモンネームの存在を確認するため。2は、コモンネームの存在を確認し、さらにそれが提供されたホスト名と一致するかどうかを検証します。実稼働環境では、このオプションの値は2(デフォルト値)のままにしておく必要があります。

curl_setopt の手動エントリ