神谷 雅紀
Escalation Engineer
KB 2007728 の説明が分かりにくいため補足の解説が欲しいという要望がありましたため、少し古い KB についての話題にはなりますが、今回は KB 2007728 を補足したいと思います。
KB 2007728
Error message when you use SSL for connections to SQL Server: "The certificate received from the remote server was issued by an untrusted certificate authority"
事象
KB が取り上げている事象は、システムイベントログに以下のイベントが記録されることがあるというものです。
ソース : Schannel
イベント ID : 36882
レベル : エラー
説明 : リモート サーバーから受信した証明書は、信頼されていない証明機関によって発行されています。 このため、この証明書に含まれているデータはどれも検証できません。 SSL 接続の要求に失敗しました。 添付されたデータにサーバー証明書が含まれています。
このイベントの [詳細] (「添付されたデータ」) には、このイベントが記録される原因となっている証明書の名前 “SSL_Self_Signed_Fallback” が含まれています。
また、以下のイベントも合わせて記録される場合があります。
ソース: Schannel
イベント ID: 36888
レベル: エラー
説明 : 次の致命的な警告が生成されました: 48。内部エラーの状態は 552 です。
原因
Schannel イベント 36882 は、イベントの説明のとおり、信頼されていない証明機関によって発行された証明書が使用されたことを示しています。
SQL Server では、クライアントとの通信を暗号化するように構成することができますが、暗号化には SSL を用います。SQL Server とクライアントとの通信が暗号化されるように構成されているにもかかわらず、 SSL のために使用することのできる証明書がインストールされていない場合、SQL Server は独自の証明書を発行し、その証明書を使用して暗号化を行います。しかし、SQL Server は、信頼された証明機関ではないため、イベント 36882 が記録されます。
このイベントはユーザー作成のクライアントアプリケーションに限って発生するのかという質問がありましたが、前述の要因により記録されるものであるため、クライアントアプリケーションの作成元や使用するデータアクセスインタフェースの種類には依存しません。ユーザーが独自に作成した Web アプリケーションであるのか、SQL Server 製品に付属している Management Studio や sqlcmd であるのかは、全く無関係です。どのようなクライアントアプリケーションからの接続であっても、前述の状況であればイベントは記録されます。また、データアクセスインタフェースが ODBC であるのか ADO.NET であるのかといったことも関係しません。
イベントを記録させないようにする方法
イベント 36882 のメッセージから対応方法は明白ではありますが、SQL Server を実行しているサーバーに、信頼された証明機関により発行された SSL 用の証明書をインストールし、その証明書を使用して接続を暗号化するように構成すれば、イベントは記録されなくなります。
証明書のインストール方法および暗号化設定方法については、以下を参照して下さい。
データベース エンジンへの暗号化接続の有効化 (SQL Server 構成マネージャー)
http://technet.microsoft.com/ja-jp/library/ms191192.aspx
Microsoft 管理コンソールで SQL Server 用に SSL 暗号化を有効にする方法
http://support.microsoft.com/kb/316898/ja
尚、セキュリティの観点からは、本来は証明書をインストールすべきですが、意図的に SQL Server の自己署名証明書を使用して暗号化を行っている場合には、このイベントを無視しても構いません。