[Windows Azure] イベントログエラーSchannel 36874 および 36888 について
みなさんこんにちは。Windows Azureサポートチームです。今回はよくお問い合わせを受ける Webロール上で発生するSchannelのイベントログエラーについてご案内します。もし同じ問題に遭遇された際に、ご参考をいただければ幸いです。
問題
セキュア通信 (SSL/TLS) を行うWebロール、ワーカーロール上でSystemイベントログに、以下のログが発生する。
Log Name: System Source: Schannel Event ID: 36874 Level: Error Description: An SSL 3.0 connection request was received from a remote client application, but none of the cipher suites supported by the client application are supported by the server. The SSL connection request has failed. // SSL の部分が TLS と記述されている場合もあります。 |
Log Name: System Source: Schannel Event ID: 36888Level: Error Description: The following fatal alert was generated: 40. The internal error state is 1205. |
原因
SSL/TLS通信の際、クライアントからのリクエストで暗号化通信路を初期化・構築が行われます。その際に、クライアントはサーバーに対して Client Helloと呼ばれるメッセージを送信します。そのリクエストに、クライアント側で利用可能な暗号化方式(Cipher)のリストが含まれていますが、そのリストの中にサーバー側で利用可能な暗号化方式がない場合に上記エラーが発生します。
詳細
Schannel はSSL/TLS通信の際に利用されるモジュールです。Windows OSでは、以下のフォルダに配置されています。
C:\Windows\System32\schannel.dll
Schannelモジュールは暗号化通信路構築の際に利用されます。SSL/TLS暗号化通信路構築の際に、クライアント・サーバー間で通信路構築作業を行います。その際に、クライアントはClient Helloと呼ばれるメッセージを送信し、それに対してサーバーはServer Helloを送信します。SSL/TLSセッション構築についてはこちらのドキュメントをご参考ください。Client Helloに含まれる暗号化方式(Cipher)がサーバー側でサポートされていない場合に通信路が作成できないためエラーが発生します。
イベントID 36888 では、通信路が作成できなかった理由について記述がありますが、致命的なアラート(fatal alert)の40は、下記ドキュメントのSSL3_ALERT_HANDSHAKE_FAILUREに該当します。最新のSDKでは、schannel.h 内にTLS1_ALERT_HANDSHAKE_FAILUREとして定義されている場合もあります。
内部エラー(internal error)の1205については、クライアント側から提示された暗号化方式が、サーバー側で対応しない場合に発生するエラーコードです。
対応策
本現象は、クライアント側で利用されている暗号化方式がサーバー側で利用できないものの場合、クライアント側で古いOSを利用されている場合、暗号化方式が破損したOS 等で発生することがあります。
サーバーの観点から見ると、暗号化方式が利用できないためリクエストを受け付けていないだけですので、多く発生していない場合には本エラーは基本的に無視をしてよいものになります。
クライアント側から見ると、接続できない状況のためサーバーで利用可能な暗号化方式をご利用いただくか、古いOSをご利用の際には、新しいOSにアップグレードしていただく必要があります。
--
Windows Azureサポートチーム
平原