Schannelのエラー

イベントID 詳細 ソース
36887 次の致命的な警告を受け取りました: 20。 Schannel

致命的と言われてビクッとするがまずSchannelとやらは何かというと、ここによればどうもSSL絡みの何からしい。MSのURLはコロコロ変わるんで後日面倒がないように抜粋。別に読まなくてよろしい。

Schannel は、インターネットで標準的に用いられている 2 種類の認証プロトコル、Secure Sockets Layer (SSL) とトランスポート層セキュリティ (TLS) を実装するセキュリティ サポート プロバイダー (SSP) です。
セキュリティ サポート プロバイダー インターフェイス (SSPI) は、認証など、セキュリティ関係の機能を実行するために Windows システムで用いられる API の 1 種です。SSPI は、Schannel SSP をはじめとする数種類のセキュリティ サポート プロバイダー (SSP) に共通のインターフェイスとして機能します。
トランスポート層セキュリティ (TLS) プロトコルの Version 1.0、1.1、1.2、Secure Sockets Layer (SSL) プロトコルの Version 2.0、3.0、データグラム トランスポート層セキュリティ (DTLS) の Version 1.0、Private Communications Transport (PCT) プロトコルは、いずれも公開キーの暗号化に基づいています。セキュリティ チャネル (Schannel) 認証プロトコル スイートは、これらのプロトコルに対応しています。どの Schannel プロトコルでも、クライアント/サーバー モデルが使用されています。

この時点でもう特に大きな害はないというのは見当が付くがそれだとネタにならない。という事でもうちょっと気合い入れて調べてみたらこういうのを見つけた。下記の表はここここから生成。

AlertCode AlertMessage Description
0 close_notify コネクションの終了を通知する
10 unexpected_message 不適切なメッセージを受信したことを通知する
20 bad_record_mac 受信したメッセージのMACが不正であることを通知する
21 decryption_failed メッセージサイズがブロック数と異なるなど復号化時に問題が発生したことを通知する
22 record_overflow 上限を超えたサイズのメッセージを受信したことを通知する
30 decompression_failure 伸張したデータが大きすぎるなど、データ伸張時に問題が発生したことを通知する
40 handshake_failure 指定されたセキュリティパラメータのセットに、利用できるものがないことを通知する
42 bad_certificate 壊れた証明書、署名の正当性が確認できない、などを通知する
43 unsupported_certificate サポートされていない証明書であることを通知する
44 certificate_revoked 署名者によって無効化された証明書であることを通知する
45 certificate_expired 期限切れの証明書である、または現在無効な証明書であることを通知する
46 certificate_unknown 証明書の処理中に何らかの問題が発生して、証明書を受理できないことを通知する
47 illegal_parameter ハンドシェイク中のパラメータが範囲外、または他フィールドと矛盾していることを通知する
48 unknown_ca 有効な証明書チェーンを受信したが、CA証明書がないか、信頼できるCAでないため受け付けられなかったことを通知する
49 access_denied 有効な証明書を受信したが、アクセスコントロールを適用したときに、送信者がネゴシエーション継続の中止を決定したことを通知する
50 decode_error フィールド値が範囲外であったり、メッセージの長さに異常があり、メッセージのデコードができないことを通知する
51 decrypt_error ハンドシェイク暗号化に失敗したことを通知する。署名の検証、鍵交換の復号、終了メッセージの検証に失敗したことも含まれる
60 export_restriction 輸入規制に従わないネゴシエーションが行われたことを通知する
70 protocol_version 指定されたプロトコルバージョンはサポート対象外であることを通知する
71 insufficient_security クライアントで利用可能な暗号化アルゴリズムよりもより安全なアルゴリズムが必要であることを通知する
80 internal_error メモリアロケーション失敗など、ハンドシェイクとは無関係な理由でネゴシエーションが継続できなくなったことを通知する
90 user_cancelled ハンドシェイク中にユーザーが処理中止を要求したことを通知する
100 no_renegotiation ネゴシエーションによるセキュリティパラメータの変更ができないことを通知する
255 unsupported_extension その他

SSL及びTLSが返すAlert Codeの一覧だ。これによるとうちは20を返してるんでbad_record_macという事らしい。macってなんだよ?macアドレスか?と思ったら違う。ここによれば、要するにデータのハッシュを送信側と受信側で付き合わせて改竄の有無を確認すると言う事らしい。ここまで来てやっとエラーの意味が分かった。このハッシュが合わないよと言ってる訳か。致命的と言えば致命的だがOSにダメージがいく類いの物ではないようだ。意味が分かってめでたしめでたし。