0

セキュリティに関する授業にもっと注意を払うべきでした。私は何かについてかなり混乱しています。まず、私が達成しようとしていることの背景を次に示します。

アクセスする必要がある Web サービスがあります。Web サービスは HTTPS としてセットアップされます。クライアントとサーバー間のトラフィックは暗号化されます (これは認証とは関係ありません)。

cURL と PHP を介して Web サービスと対話しています。HTTP を介してローカルで動作する例を取得しました。cURL/PHP 側に関しては、正しい方向に進んでいると確信しています。

コードの HTTP バージョンを使用して HTTPS 経由で Web サービスにアクセスすると、error code 60 "SSL certificate problem, verify that the CA cert is OK" (error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed)

私の読書では、PEM ファイルが必要であり、次のような追加の cURL オプションを設定する必要があるようです。

  • CURLOPT_CAINFO
  • CURLOPT_SSLCERT
  • CURLOPT_SSLKEYPASSWD

私の質問は、PEM ファイルをどこで入手できるか、または簡単に作成できるかどうかをどのように知ることができるかということです。何かが足りないと確信しているので、これはおそらく明白な答えになるでしょうが、私が見逃している背景を尋ねて取得する必要があると思います。

修正: Web サービスは VeriSign によって署名された証明書を使用しています。したがって、自己署名証明書ではありません。また、Web サービスは外部組織によって所有および運営されています。

ありがとう。

4

2 に答える 2

1

これを尋ねる前にグーグルで調べたにもかかわらず、「thatidiotguy」(彼のユーザー名であり、彼の私の名前ではありません。;-))と少し前後した後、答えに出くわしたようです。

cURL は、そのままでは CA (VeriSign またはその他) を信頼しません。これは、サーバー上でセットアップする必要があります。問題を「解決」するには、2 つのオプションがあります。次のコマンドで検証をバイパスできます。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

これはセキュリティに関して最適ではないことに注意してください。CA によって署名されているかどうかに関係なく、すべての証明書が信頼できるものとして受け入れられます。

適切な修正には、元の証明書 (私の場合、これは Web サービスを意味します) を取得し、証明書を X.509 証明書 (PEM) として「エクスポート」することが含まれます。次に、証明書をサーバーに適切に移動し、次の構成を設定する必要があります。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); //Check that the common name exists and that it matches the host name of the server
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/path/to/cert/my-exported.crt"); //PEM file

ソース: http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/

于 2012-08-16T20:56:57.087 に答える
1

答えはとても簡単です。通常のブラウザにも同梱されている証明書バンドルをダウンロードする必要があります。

幸いなことに、その作業はここですでに行われています。

http://curl.haxx.se/docs/caextract.html

ダウンロードしたら、このファイルへのパスを CURLOPT_CAINFO で指定します。

于 2012-08-17T00:03:22.970 に答える