web-dev-qa-db-ja.com

SQL Server構成マネージャーのドロップダウンにSSL証明書がない

SSLを使用してリモートで接続できるように、SQL Server 2014を構成しようとしています。有効なワイルドカード証明書がサーバーにインストールされ、証明書のドメイン名(example.com)がサーバーのFQDN(test.windows-server-test.example.com)と一致します。

問題は、SQL Server構成マネージャーでは、証明書がリストされていないため、選択できないことです。

blank dropdown

つまり、 このMSチュートリアル のステップ2.e.2に固執しています。

13
Jonah

コメントで通信した後、あなたの主な問題は、使用する証明書の[〜#〜] cn [〜#〜]部分であると推測できます。 IISサーバーのTLS通信を成功させるには、SQL Serverのような強力な制限はありません。

Microsoftは、証明書の名前がコンピューターの完全修飾ドメイン名(FQDN)でなければならないことを here を参照してください。Subject証明書の一部はCN = test.widows-server-test.example.comのようになります。ここでtest.widows-server- test.example.comは、コンピューターのFQDNです。例えばCN = * .example.comおよびSubject Alternative Nameを使用するだけでは不十分です。これにはDNS Name=*.example.comDNS Name=test.widows-server-test.example.comDNS Name=test1.widows-server-test.example.comDNS Name=test.widows-server-test2.example.comなどが含まれます。 。このような証明書はTLSでは問題ありませんが、SQL Serverはそれを破棄します。 記事 を参照してください。近い問題について説明しています。

SQL ServerのFQDNと等しいCNを使用して自己署名証明書を作成し、証明書がSQL Server構成マネージャーによって表示されることを確認することをお勧めします。

[〜#〜] updated [〜#〜]:プロセスモニターに関してもう少し問題を分析し、レジストリの2つの値がSQL Server構成マネージャーにとって重要であることがわかりました。キーの下のHostnameおよびDomainの値

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

DomainHostnameを証明書のCNに対応する値に変更すると、証明書はSQL Server構成マネージャーに既に表示されます。すべての問題ではないかもしれませんが、SQL ServerがWebサーバー(IISなど)としてはるかに多くを必要としていたことを示しています。

UPDATED 2:問題をもう一度詳しく調べて、すでに持っている一般的なSSL証明書を構成する方法を見つけたと思います(たとえば、 暗号化StartSSL またはその他)。

SQL Server Configuration Managerの動作をSQL Serverが必要とする構成と区別することが重要です。 Configuration Managerのプロパティの[証明書]タブには、SQL Serverとしてより厳しい制限があります。上記ではSQL Server構成マネージャーの制限についてのみ説明しましたが、レジストリーで直接構成して、SQL Serverでより一般的なSSL/TLS証明書を使用することができます。これを行う方法を以下に説明します。

必要なことは、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\MSSQLServer\SuperSocketNetLibのようなキーの下のレジストリで行うことができます。MSSQL12.SQL2014の部分は、あなたの場合は少し異なる場合があります。 SQL Server構成マネージャーは、レジストリに2つの値を設定するのに役立ちます:ForceEncryptionおよびCertificate

enter image description here

Certificate値は、証明書のプロパティを調べることで見つけることができるSHA1ハッシュです。

enter image description here

または証明書の拡張プロパティ。使用法certutil.exe -store Myで表示されます。

enter image description here

「Cert Hash(sha1)」値をコピーし、すべてのスペースを削除して、Certificate値の値としてレジストリに配置するだけです。設定を行い、SQL Server Windowsサービスを再起動すると、C:\Program Files\Microsoft SQL Server\...\MSSQL\LogディレクトリのERRORLOGファイルに次のような行が表示されます。

2016-04-25 21:44:25.89サーバー証明書[Cert Hash(sha1) "C261A7C38759A5AD96AC258B62A308A26DB525AA"]は暗号化のために正常にロードされました。

16
Oleg

これを、SQL 2016 SP2とフェールオーバークラスターで発生した同様の問題でつまずくかもしれない将来の人々のために追加したいと思います。レジストリに追加された証明書のprint印は、すべて大文字でなければなりませんでした。

これが次の人に役立つことを願っています。

2
Joe Mroczek

承認済み回答の更新2セクションの手順を実行すると、SQL Serverサービスを開始できず、イベントビューアーでこれらのエラーが発生しました。

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

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

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

sQL Serverエラーログにエラーがあります:

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

グーグルで見つけて 解決策

SQL Serverサービスを実行しているWindowsアカウント(NT Service\MSSQLServer私の場合)は、次のフォルダー/登録エントリに対する完全な権限を持っています。

  1. C:\ Program Files\Microsoft SQL Server [SQLサーバーインスタンス]\MSSQL \
  2. C:\ ProgramData\Microsoft\Crypto\RSA\MachineKeys
  3. HKLM\System\CurrentControlSet\Services\WinSock2\Parameters

No.1 NT Service\MSSQLSERVERはすでに許可を受けています。

2番をチェックしましたNT Service\MSSQLSERVERには許可がなく、許可を追加しました。そのフォルダー内のファイルの1つが操作を拒否されたことを示すエラーをポップアップしましたが、私はそれを無視しました(他に何もできません)

私はNo.3をチェックせず、SQL Serverを起動しようとしましたが、うまくいきました!!

1
Ricky

SQL Serverドメインアカウントでサーバーにログオンし(一時的にローカル管理者にアカウントを追加する必要がありました)、SQL Serverサービスアカウントの個人用フォルダーに証明書をインポートしました。サーバーを再起動すると、SQL Serverは証明書を見ることができました。それが誰かを助けることを願っています。

0
Mary Nobakht

追加の障害モードはキーの長さです-SQLには最小2048のキー長が必要です。DHチャネルが無効の場合。

0
user2702772