
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 アドレスを使用します。この方法では、クライアントでの変更は必要ありません。