この記事では、SQL Server で TLS 1.2 にアップグレードした後に発生する可能性がある Secure Sockets Layer (SSL) エラーに関する情報を提供します。 また、データを手動で取得できるメソッドの一覧も示します。 SQLCHECK ツールを実行し、 SQLCHECK ログ ファイルの情報を確認することもできます。
現象
TLS プロトコルを TLS 1.2 にアップグレードした後に、次の問題が発生する可能性がある次のシナリオを検討してください。
Microsoft SQL Server では、弱いハッシュ アルゴリズムによって署名された証明書が使用されます。 このような証明書には、MD5、SHA224、SHA512 が含まれます。
TLS 1.2 のアップグレードは、クライアントまたはサーバーにのみ適用されましたが、両方には適用されませんでした。
TLS 1.0 が無効です。
クライアントとサーバーの間に一致する暗号アルゴリズムはありません。
このシナリオでは、アップグレードの完了後に次の問題が発生します。
サーバー証明書に影響する問題は、クライアント コンピューターからのローカル接続と接続にも影響します。 詳細については、「 SQL Server への接続の暗号化」を参照してください。
アプリケーションによって、次のいずれかのエラー メッセージが生成される場合があります。
名前付きパイプ
サーバーとの接続は正常に確立されましたが、ログイン プロセスでエラーが発生しました。 (プロバイダー: SSL プロバイダー、エラー: 0 - パイプのもう一方の端にプロセスがありません)Microsoft SQL Server、エラー: 233。
TCP
サーバーとの接続は正常に確立されましたが、ログイン プロセスでエラーが発生しました。 (プロバイダー: SSL プロバイダー、エラー: 0 - リモート ホスト 10054 によって接続が強制的に閉じられました)Microsoft SQL Server、エラー: 233。
ネットワーク キャプチャがある場合、サーバーが接続を閉じて Client Hello
パケットに応答することを示す次のスクリーンショットのようになります。
解決方法
これらのエラーを解決するには、次の修復手順に従います。
SQL Server 構成マネージャーを開き、<InstanceName> の Protocols を右クリックし、Properties を選択します。
Certificate タブを選択し、使用されている証明書を確認します。
証明書が存在する場合は、 View を選択して調べ、 Clear を選択します。 次に、手順 4 に進みます。
証明書が存在しない場合は、SQL Server エラー ログ ファイルを調べてハッシュ コードを取得します。 次のいずれかのエントリが表示される場合があります。
2023-05-30 14:59:30.89 spid15s The certificate [Cert Hash(sha1) "B3029394BB92AA8EDA0B8E37BAD09345B4992E3D"] was successfully loaded for encryption.
又は2023-05-19 04:58:56.42 spid11s A self-generated certificate was successfully loaded for encryption.
証明書が自己生成されている場合は、手順 2 に進みます。
Microsoft 管理コンソール (MMC) で Computer 証明書ストア を開きます。
個人証明書に移動します。
[目的] 列を展開し、サーバー認証が有効になっている証明書をダブルクリックします。
拇印がエラー ログ ファイルの拇印と一致するかどうかを確認します。 そうでない場合は、別の証明書を試してください。
署名ハッシュ アルゴリズムを確認します。 MD5、SHA224、または SHA512 の場合、TLS 1.2 はサポートされません。 脆弱なアルゴリズムの 1 つである場合は、SQL Server で使用できないように Server Authentication を無効にします。
証明書が SQL Server 構成マネージャー で明示的に指定されている場合は、Clear を選択して削除します。
MMC で証明書を見つけます。
MMC で証明書を右クリックし、 Properties を選択します。
General タブで、証明書を完全に無効にするか、Server Authentication を選択的に無効にします。
変更を保存します。
SQL Server を再起動してください。
エラー ログは、自己生成証明書が使用されていることを示すはずです。 問題が解決した場合は、自己署名証明書を使用して SQL Server を正常に実行できます。 Verisign またはその他の証明書が必要な場合は、TLS 1.2 に適した強力なハッシュが使用されていることを証明書プロバイダーに確認するように依頼する必要があります。 問題が解決しない場合は、手順 2 に戻ります。
有効および無効の TLS プロトコルを確認する
有効な TLS プロトコルと無効になっている TLS プロトコルを確認するには、次の手順に従います。
まだ行っていない場合は、バックグラウンドと基本的なアップグレード ワークフローを確認します。
TLS 1.2 を適用するには、クライアントとサーバーの両方をアップグレードする必要があります。 必要に応じて、サーバーをアップグレードできますが、アップグレードされていないクライアントが接続できるように TLS 1.0 は有効のままにしておきます。
REGEDIT を使用して SSL または TLS レジストリを確認します。
有効または無効になっている SSL または TLS のバージョンは、次のレジストリ サブキーにあります。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
SSL または TLS の各バージョンにはクライアントとサーバーのサブキーがあり、どちらも Enabled と Disabled の値を持ちます。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001
Note
0 以外の値は TRUE として扱われます。 ただし、 1 は、通常、 FFFFFFFF (または -1) ではなく推奨されます。
互換性のない設定がないことを確認します。
たとえば、TLS 1.0 は無効になっており、TLS 1.2 はサーバーで有効になっています。 これは、これらの設定がクライアントの設定と一致しないか、クライアント ドライバーが更新されない可能性があるためです。
この状況をテストするには、TLS 1.2 の
Enabled=0
を設定します (また、TLS 1.0 が無効になっている場合は再度有効にします)。SQL Server を再起動して、問題が TLS 1.2 に関連しているか、それとも一般的な問題であるかを確認します。
一致する暗号スイートがない
Client Hello
およびServer Hello
パケット内のクライアントとサーバーの TLS バージョンと暗号スイートを調べることができます。 Client Hello
パケットはすべてのクライアント暗号スイートをアドバタイズし、Server Hello
パケットは 1 つの暗号スイートを指定します。 一致するスイートがない場合、サーバーは Server Hello
パケットを送信して応答するのではなく、接続を閉じます。
ネットワーク トレースを使用できない場合は、次のレジストリ サブキーの関数値を確認できます。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002
一致するアルゴリズムが表示されない場合は、Microsoft サポートにお問い合わせください。 サポート エンジニアを支援するには、 Advanced SSL データ キャプチャで指定されているネットワーク トレースまたは BID トレースをキャプチャします。