web-dev-qa-db-ja.com

Windows SSL Cipher-Suiteが特定のSSL証明書で制限されるのはなぜですか?

問題:Windows Server 2008 R2は、サーバーで特定の証明書を使用する場合、次のSSL暗号スイートのみをサポートします。

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

XP Cryptographic APIはデフォルトでAES暗号をサポートしていないため、これはXPクライアントがサーバーに接続することを防ぎます。
その結果、Internet Explorerまたはリモートデスクトップを使用して接続しようとすると、サーバーログに次のエラーが表示されます。 (MicrosoftのCAPIを使用しているため)

Schannelエラー36874「リモートクライアントアプリケーションからTLS 1.0接続を受け取りましたが、クライアントでサポートされている暗号スイートがサーバーでサポートされています。SSL接続要求が失敗しました。」
Schannelエラー36888「次の致命的なアラートが生成されました:40。内部エラー状態は1204です」

14
Gary

サーバーで使用されている証明書が証明書要求フォームのレガシーキーオプションを使用して生成された場合、その証明書の秘密キーはMicrosoftのレガシー暗号APIフレームワークに格納されます。 Webサーバーが新しいCryptographic Next Generation(CNG)フレームワークを使用してリクエストを処理しようとすると、レガシーフレームワークに格納されているRSA秘密鍵に関連するものが、新しいフレームワークでは使用できないようです。その結果、RSA暗号スイートの使用は厳しく制限されます。

解決:
カスタム証明書要求ウィザードのCNGキーテンプレートを使用して証明書要求を生成します。

MMC |ローカルコンピューター証明書マネージャー|個人証明書フォルダ| (右クリック)|すべてのタスク->高度な操作|カスタムリクエストを作成する| 「登録ポリシーなしで続行」| select "(no template)CNG key"|必要に応じて、証明書の要求を完了してください。

キーが正しい場所にあることを確認します。
http://msdn.Microsoft.com/en-us/library/bb204778(VS.85).aspx
http://www.jensign.com/KeyPal/index.html

正しい暗号スイートを検証するためのツール:
http://pentestit.com/2010/05/16/ssltls-audit-audit-web-servers-ssl-ciphers/
https://www.ssllabs.com/

SSL暗号スイート設定:
http://support.Microsoft.com/kb/2450
http://blogs.technet.com/b/steriley/archive/2007/11/06/changing-the-ssl-cipher-order-in-internet-Explorer-7-on -windows-Vista.aspx

これを理解するには、1週間かかりました。これにより、誰かが同じ問題を解決できることを願っています。

14
Gary

これとまったく同じ問題を自分で手に入れました。この投稿により、時間を大幅に節約できました。

ゲイリーのソリューションは適切ですが、PFXをPEMに変換し、opensslを使用して再びPFXに戻すだけで問題を解決できました。新しいPFXはIISに証明書をインポートしましたが、欠落している暗号を確認できるという違いがあります。

こうやって:

openssl pkcs12 -in mycert.pfx -out mycert.cer -nodes

次に、cerファイルをキー、証明書、中間証明書の3つに分割します。

openssl pkcs12 -export -out mycert-new.pfx -inkey mycert.key \
-in mycert.crt -certfile mycert-intermediate.crt

次に、新しい.pfxファイルをIISにインポートすると、予想されるすべての暗号が使用されます。

したがって、証明書を再発行する必要はありません。

3

これはKeySpec = 2-AT_SIGNATUREの問題である可能性があります

certutil -verifystore -v私の「証明書の拇印」でKeySpec値を確認します。 2の場合は、証明書をPFXファイルとしてエクスポートしてから、certutil -importpfx AT_KEYEXCHANGEを実行して修正する必要があります。

0
Michael

ありがとう、あなたの投稿は私を助けてくれましたが、私の問題はまったく同じではありませんでした。

しかし、原因は私の側のWINHTTP SERVER API構成の誤りでした。 IPが変更され、新しいサーバー証明書をマシン "MY"に挿入すると、HttpSetServiceConfigurationのALREADY_EXISTS戻りコードが無視されました。

そのため、以前のサーバーTLS証明書を使用しましたが、共通の名前が間違っており、新しいサーバー名と一致しませんでした。

HttpDeleteServiceConfiguration()またはコマンドライン "netsh http delete sslcert 0.0.0.0:8443"を正しく行わないと、次の症状を伴う厄介なエラーが発生します。

1)TLSでは、Client HelloはすぐにサーバーからのTCPパケットにAckとリセットフラグビットが設定されたパケットで遭遇します(ハンドシェイク失敗のアラートだと思いますか?)

2)イベントビューアに「次の致命的なアラートが生成されました:40。内部エラー状態は107です。」

「SSL 3.0接続要求がリモートクライアントアプリケーションから受信されましたが、クライアントアプリケーションでサポートされている暗号スイートがサーバーでサポートされていません。SSL接続要求は失敗しました。」

したがって、暗号スイートの不一致を追跡する前に、使用するサーバー証明書を本当に使用していることを確認してください。

         netsh http show sslcert

そしてハッシュ値をチェックしてください!

0
AndrewDover