Ubuntu16.04 : Nginx 1.10 : Nginx は複数の証明書情報を提供します。SSL はブラウザ上では完璧に動作しますが、curl で問題が発生します。cURL エラー 51

Ubuntu16.04 : Nginx 1.10 : Nginx は複数の証明書情報を提供します。SSL はブラウザ上では完璧に動作しますが、curl で問題が発生します。cURL エラー 51

nginx/1.10.0 + letsencrypt を搭載した Ubuntu サーバー (16.04) 上に複数のサイトがあります。

SSLはブラウザ上では正常に動作しているように見えますが、curlリクエスト(SSLあり)を使用している開発者アプリケーションでは、次のようなエラーが発生します。

Update Failed: Download failed. cURL error 51: SSL: certificate subject name 'domain2.com' does not match target host name 'domain1.com'

SSLLABSを使用して確認したところ、A_gradeと表示されましたが、複数の証明書(同じサーバー上の別のドメインの証明書)が読み込まれています。

Certificate #1: RSA 2048 bits (SHA256withRSA)

そして

Certificate #2: RSA 2048 bits (SHA256withRSA) No SNI

2 番目の証明書では、次のエラーがあります。

Common names    domain2.com   MISMATCH
Trusted No   NOT TRUSTED

2 番目のドメイン名についても Curl エラーが発生していました。

cURL error 51: SSL: certificate subject name 'domain2' does not match target host name 'domain1'

domain2 はまったく別のサイトです。 nginx が domain1 とともにどのように情報を送信しているかはわかりません。

また、Letsencrypt SSLでドメインを作成して他のサーバーで同じシナリオをテストしましたが、すべて同じ問題が発生しました。SSLlabsで確認したところssllabsチェッカードメイン1とともにドメイン2の証明書の詳細を取得できます。ドメイン1のグレードはAのままです。他のすべてのチェックサイトでも安全です。

また、SSLlabs でドメイン 2 をチェックすると、同じサーバーにある他のドメインの証明書も取得されます。(ただし、ドメイン A、B、C、D がある場合、ドメインの 1 つである SSL チェックでは 1 つの証明書のみが取得されます。これは問題ではなく、他のすべてのドメインでこの問題が発生します。)

スクリーンショットを添付します。(長い全ページのスクリーンショット) これで事件が明らかになると思います :(

スクリーンショット

**この問題を無視して curl リクエストを成功させるような、安全でない Curl リクエストをアプリケーションで使用することはできませんでした。これについてアイデアをお持ちの方がいらっしゃいましたら、ご協力ください。私はこれに多くの時間を費やしましたが、それでも...

上記の問題はWordpressプラグインに関するもので、curlと一緒に特定のパラメータを追加できません。(WPコアから)

前もって感謝します。

答え1

使用中のcurlバージョンには基本的なスニサポート。SSL を使用する複数のドメインが同じ IP アドレスでホストされている場合は、SNI が必要です。

基本的に 3 つのオプションがあります。

  • curlをSNIをサポートするバージョンにアップデートします。
    これに対するサポートはバージョン7.18.1で導入
  • クライアントにホストパラメータを自分で追加します。
    -H "Host: domain1.com"
  • ドメインを移動して別の IP アドレスを使用します。この方法では、クライアントでの変更は必要ありません。

関連情報