![Ubuntu16.04 : Nginx 1.10 : Nginx は複数の証明書情報を提供します。SSL はブラウザ上では完璧に動作しますが、curl で問題が発生します。cURL エラー 51](https://rvso.com/image/696995/Ubuntu16.04%20%3A%20Nginx%201.10%20%3A%20Nginx%20%E3%81%AF%E8%A4%87%E6%95%B0%E3%81%AE%E8%A8%BC%E6%98%8E%E6%9B%B8%E6%83%85%E5%A0%B1%E3%82%92%E6%8F%90%E4%BE%9B%E3%81%97%E3%81%BE%E3%81%99%E3%80%82SSL%20%E3%81%AF%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E4%B8%8A%E3%81%A7%E3%81%AF%E5%AE%8C%E7%92%A7%E3%81%AB%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81curl%20%E3%81%A7%E5%95%8F%E9%A1%8C%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82cURL%20%E3%82%A8%E3%83%A9%E3%83%BC%2051.png)
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 アドレスを使用します。この方法では、クライアントでの変更は必要ありません。