29

PHP関数とCA証明書を使用するAPIをテストしていますcurl_execが、問題が発生していて、少し迷っています。

Apache VirtualHostでSSLを構成しましたが、問題ないように見えます(https:://[myVHost]...を開くと機能します)。

ただし、API curl呼び出しは、次のメッセージを返します。

  • SSL peer certificate or SSH remote key was not OK

私はSSLの経験があまりないので、その原因についてはほとんど考えていません。

アップデート:

これは、cURLリクエストで使用しているコードです。2行にコメントを付けて値を変更し(「TODO」行を参照)、このように機能していますが、これは回避策にすぎません...

$opts[CURLOPT_URL] = $url;
    $opts[CURLOPT_RETURNTRANSFER] = true;
    $opts[CURLOPT_CONNECTTIMEOUT] = 50;
    $opts[CURLOPT_TIMEOUT] = 100;
    $headers = array(
        'Accept: application/json',
        "User-Agent: APIXXX-PHP-Client");
    $opts[CURLOPT_HTTPHEADER] = $headers;
    $opts[CURLOPT_USERPWD] = $env->getApiKey() . ':';
    if (certificatePresent()) {

        //  $opts[CURLOPT_SSL_VERIFYPEER] = true;
        //  $opts[CURLOPT_SSL_VERIFYHOST] = 2;

        // TODO: SET IT BACK
        $opts[CURLOPT_SSL_VERIFYPEER] = 0;
        $opts[CURLOPT_SSL_VERIFYHOST] = 0;

        $opts[CURLOPT_CAINFO] = $path

      }

    curl_setopt_array($curl, $opts);

    $response = curl_exec($curl);
4

8 に答える 8

5

/CURLOPT_SSL_VERIFYPEERに変更される可能性のある設定が他に 2 つありfalseます0

CURLOPT_SSL_VERIFYHOST
CURLOPT_SSL_VERIFYSTATUS

セキュリティを無効にするのではなく、SSL 証明書と設定を修正する必要があることに注意してください。

于 2017-09-21T09:50:13.420 に答える
3

古い投稿に回答していますが、新しい視聴者の助けになると思います-

追加することで問題を確認できます

$opts[CURLOPT_VERBOSE] = 1

自己署名証明書の場合、DNS キャッシュでホスト名を使用できないため、クライアントは IP アドレスを使用してサーバーに接続できます。その場合、サーバー証明書の COMMON NAME(CN) はサーバー IP と一致する必要があります (サーバー証明書の生成時に IP アドレスを共通名として入力します)。正しく実行すると、次のメッセージが表示されます。

一般名: 192.168.0.1 (一致)

ここでは 192.168.0.1 が例です。

于 2017-03-08T13:45:19.167 に答える
0

有効な SSL 証明書を作成し、それが信頼できるフォルダーに格納されていることを確認できます。

の開発者コマンド プロンプトに次のコマンドを含めることで、有効な SSL 証明書を作成できますVS2012。(これは、最初に developer と入力することで取得できます)

次のコマンドは、URL が である Web サーバー上で Secure Sockets Layer (SSL) を使用する Web アプリケーションのテストに使用できる自己署名証明書を作成しますwww.example.com。オプションで定義された OID は、-ekuその証明書をSSL server certificate. 証明書はマイ ストアに保存され、(ユーザーではなく) コンピューター レベルで使用できます。証明書の秘密鍵はエクスポート可能で、証明書は から有効ですMay 10, 2010 through December 22, 2011

Makecert -r -pe -n CN="www.example.com" -b 05/10/2010 -e 12/22/2011 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localmachine -sky exchange -sp "Microsoft RSA SChannel 暗号化プロバイダー" -sy 12

SSL 証明書の作成方法の詳細については、

ここで、この証明書が信頼できることを確認してください。これはCERTMGR、cmd..

作成された証明書は PERSONAL フォルダーにあります。それをコピーして、TRUSTED PEOPLE フォルダーに貼り付けます。

これでうまくいくはずです。うまくいかない場合はお知らせください。

于 2014-05-19T13:04:22.217 に答える
0

SSL_VERIFYPEER中間者攻撃が心配な場合は、有効にしたいのは当然です。

$pathAPI 所有者から提供された証明書 (または証明書バンドル) を指すように設定されていますか? Web サーバーのユーザーはその証明書を読み取ることができますか? その場合、ブラウザで手動で https アドレスにアクセスして証明書を調べたときと同じ証明書であることを確認しましたか?

動作させることができず、接続先の API に、通常のブラウザーで警告なしに動作する SSL 証明書がある場合は$path、サーバー上の CA ルート バンドルに設定できるはずです。

于 2014-05-19T04:10:16.397 に答える
0

同じ問題がありました。ここの指示に従います:http://siteber.com/download-failed-ssl-peer-certificate-or-ssh-remote-key-was-not-ok/そしてそれは私のものを修正しました。

基本的に私は /etc/resolv.conf に行きました

と置き換えます

OpenDNS サーバー:

208.67.222.222

208.67.220.220

Google のパブリック DNS サーバー:

ネームサーバー 8.8.8.8 ネームサーバー 8.8.4.4

于 2014-09-06T01:45:27.287 に答える