web-dev-qa-db-ja.com

SQL Serverサービスが「不良ですか?」 SSL証明書

今朝、Win2012で実行されているSQL Server 2012サービスがシャットダウンしたことが明らかになりました。サーバー管理者としてログインしてSSMSにアクセスしようとすると、資格情報を入力した後、「トランスポート」エラーが発生しました。 Windowsサービスをチェックすると、SQL ServerとAgentの両方が停止しました。それらを起動しようとしましたが、タイムアウトエラーが発生しました。

SQLイベントログには次のエントリが含まれます。

サーバーは、SSL接続を開始するために必要な証明書をロードできませんでした。次のエラーが返されました:0x8009030d。証明書をチェックして、有効であることを確認します。

Windowsイベントログには、次のエントリが含まれます。

ログ名:アプリケーション

ソース:MSSQLSERVER

日付:2013年3月14日09:01:40

説明:ユーザー指定の証明書をロードできません[Cert Hash(sha1) "A1CF6EE1C352B7A185950EB400013269759C24BD"]。サーバーは接続を受け入れません。証明書が正しくインストールされていることを確認する必要があります。 Books Onlineの「SSLで使用するための証明書の構成」を参照してください。

説明:TDSSNIClientの初期化がエラー0x80092004、ステータスコード0x80で失敗しました。理由:SSLサポートを初期化できません。オブジェクトまたはプロパティが見つかりません。

説明:TDSSNIClientの初期化は、エラー0x80092004、ステータスコード0x1で失敗しました。理由:インフラストラクチャエラーのため、初期化に失敗しました。以前のエラーを確認してください。オブジェクトまたはプロパティが見つかりません。

説明:ネットワークライブラリの内部エラーのため、ネットワークライブラリを起動できませんでした。原因を特定するには、エラーログでこのエラーの直前のエラーを確認します。

説明:SQL ServerはFRunCommunicationsManagerスレッドを生成できませんでした。関連する可能性のある問題については、SQL ServerエラーログとWindowsイベントログを確認してください。

次の手順で問題が修正されました。

  1. [スタート]> [SQL Server構成マネージャー]
  2. SQL Serverネットワーク構成> MSSQLSERVERのプロトコル(プロパティ)
  3. [全般]> [暗号化を強制]をオフにします
  4. [スタート]> [サービス]> [MSSQLSERVERサービスを開始]

更新:

上記は、次の再起動まで問題を修正するだけで、それによって再び発生しました。どうやら、SSL証明書にはSQL2012が読み取る権限が必要ですが、これが修正されるまで再起動を続けないので、SSL経由のSSMSではなくRDC経由でアクセスしています。

6
EvilDr

マシンのキーセットコンテナーフォルダーのACLを変更するアプリケーションがあります。これが発生すると、正規のキーセットユーザーはこれらのキーセットへのアクセスを失います。正しい権限セットについては、 KB 278381:MachineKeysフォルダーのデフォルトの権限 を参照してください。

絶対的な確認が必要な場合は、 バグ:SQL Server 2005がネットワークサービスアカウントで実行されている場合、証明書を使用して暗号化を有効にできない の「回避策」(リセットされるC++アプリのコンパイルが必要) ACLを適切に...)。ただし、前述のKB278381に従ってACLを設定するだけで、問題が解決するかどうかを確認できます。

その他の関連KB:

どのアプリケーションがACLを変更するかはまだわかりません。私のお金は一部のウイルス対策アプリにあります。ランダムな異種情報すべてについて、どうやって知っているのか尋ねないでください...

4
Remus Rusanu

Remusが言及したものに加えて、暗号化サービスがクラッシュした場合に、これが起こっていることがわかります。サーバーを再起動すると問題は解決しますか?

0
mrdenny

これに似た状況でした。 SQL Server構成マネージャーで強制暗号化が「いいえ」であり、証明書ページがクリアであることが示されていても、このエラーが発生し続け、サービスをまったく開始できませんでした。

レジストリ(私のインストール用):

HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQLServer\SuperSocketNetLib

証明書文字列の値は、エラーメッセージのハッシュと同じです。その値を削除するのがうまくいきました。

0
Richard Webster