この記事では、SQL Server の証明書の要件と、証明書がこれらの要件を満たしているかどうかを確認する方法について説明します。
SQL Server 暗号化の証明書要件
SQL Server 暗号化に TLS を使用するには、次の条件を満たす証明書 (3 つのデジタルの種類のいずれか) をプロビジョニングする必要があります。
証明書は、ローカル コンピューター証明書ストアまたは SQL Server サービス アカウント証明書ストアのいずれかに存在する必要があります。 SQL Server スタートアップ アカウントの変更による証明書の再構成を回避するため、ローカル コンピューターの証明書ストアをお勧めします。
SQL Server サービス アカウントには、TLS 証明書にアクセスするために必要なアクセス許可が必要です。 詳細については、「接続を暗号化するために SQL Server データベース エンジンを構成する」を参照してください。
現在のシステム時刻は、証明書のプロパティValid fromの値以後、かつプロパティValid toの値以前である必要があります。 詳細については、「 期限切れの証明書」を参照してください。
注
証明書がサーバー認証に使用されていること。 これには、サーバー認証 (1.3.6.1.5.5.7.3.1) を指定するために、証明書の拡張キー使用法プロパティが必要です。
証明書は、
AT_KEYEXCHANGE
のKeySpec
オプションを使用して作成する必要があります。 これには、 従来の暗号化ストレージ プロバイダー を使用して秘密キーを格納する証明書が必要です。 通常、証明書のキー使用法プロパティ (KEY_USAGE) には、キーの暗号化 (CERT_KEY_ENCIPHERMENT_KEY_USAGE
) とデジタル署名 (CERT_DIGITAL_SIGNATURE_KEY_USAGE
) も含まれます。証明書の Subject プロパティは、共通名 (CN) がサーバー コンピューターのホスト名または完全修飾ドメイン名 (FQDN) と同じであることを示す必要があります。 ホスト名を使用する場合は、証明書に DNS サフィックスを指定する必要があります。 SQL Server がフェールオーバー クラスターで実行されている場合、共通名は仮想サーバーのホスト名または FQDN と一致する必要があり、フェールオーバー クラスター内のすべてのノードで証明書をプロビジョニングする必要があります。 たとえば、
test1.*<your company>*.com
とtest2.*<your company>*.com
という名前のノードを持つ 2 ノード クラスターがあり、 virtsql という名前の仮想サーバーがある場合は、両方のノードにvirtsql.*<your company>*.com
の証明書をインストールする必要があります。 SQL クラスターの詳細については、「 フェールオーバー クラスタリングをインストールする前に」を参照してください。可用性グループ リスナーに接続する場合、フェールオーバー クラスター内の参加しているサーバー ノードごとにプロビジョニングされる証明書には、証明書の サブジェクト代替名 に設定されているすべての可用性グループ リスナーの一覧も含まれている必要があります。 詳細については、「 リスナーと TLS/SSL 証明書」を参照してください。 SQL Always On の詳細については、「 Always On 可用性グループ リスナーへの接続」を参照してください。
サブジェクト代替名には、クライアントが SQL Server インスタンスへの接続に使用する可能性があるすべての名前を含める必要があります。 可用性グループを使用する場合、サブジェクト代替名には、localhost 及び作成したリスナーそれぞれの NetBIOS 名と完全修飾ドメイン名 (FQDN) を含める必要があります。
クライアントは、サーバーによって使用される証明書の所有権を確認できる必要があります。 クライアントに、サーバー証明書に署名した証明機関の公開キー証明書がある場合、それ以上の構成は必要ありません。 Microsoft Windows には、多くの証明機関の公開キー証明書が含まれています。 サーバー証明書が公開キー証明書を持たない公開証明機関または秘密証明機関によって署名されている場合は、SQL Server に接続する各クライアントにサーバー証明書に署名した証明機関の公開キー証明書をインストールする必要があります。
重要
コンピューター ストアに証明書が存在する場合、SQL Server は起動しませんが、上記の一覧の一部の要件のみを満たし、SQL Server 構成マネージャーまたはレジストリ エントリで使用するように手動で構成されている場合に限られます。 すべての要件を満たす別の証明書を選択するか、SQL Server で生成された自己署名証明書で説明されているように、要件を満たす証明書をプロビジョニングするか、自己生成証明書を使用できるようになるまで 、SQL Server で使用されないようにします。
証明書が要件を満たしているかどうかを確認する
SQL Server 2019 (15.x) 以降のバージョンでは、SQL Server Configuration Manager は、構成フェーズ自体の間にすべての証明書要件を自動的に検証します。 証明書の構成後に SQL Server が正常に起動した場合は、SQL Server でその証明書を使用できることを示します。 ただし、一部のクライアント アプリケーションには、暗号化に使用できる証明書に関するその他の要件が残っていて、使用されているアプリケーションによって異なるエラーが発生する場合があります。 このシナリオでは、クライアント アプリケーションのサポート ドキュメントで、この問題の詳細を確認する必要があります。
次のいずれかの方法を使用して、SQL Server で使用する証明書の有効性を確認できます。
sqlcheck ツール:
sqlcheck
は、現在のコンピューターとサービス アカウントの設定を調べ、さまざまな接続エラーのトラブルシューティングに役立つテキスト レポートをコンソール ウィンドウに生成するコマンドライン ツールです。 出力には、証明書に関する次の情報があります。Details for SQL Server Instance: This Certificate row in this section provides more details regarding the certificate being used by SQL Server (Self-generated, hard-coded thumbprint value, etc.). Certificates in the Local Computer MY Store: This section shows detailed information regarding all the certificates found in the computer certificate store.
ツールの機能とダウンロード手順の詳細については、「 CSS_SQL_Networking_Tools Wiki へようこそ」を参照してください。
certutil ツール:
certutil.exe
は、証明書サービスの一部としてインストールされるコマンド ライン プログラムです。 certutil.exe を使用して、証明書情報をダンプおよび表示できます。 詳細な情報を取得するには、-v
オプションを使用します。 詳細については、「certutil」を参照してください。証明書スナップイン: [証明書スナップイン ] ウィンドウを使用して、コンピューター上のさまざまな証明書ストアの証明書に関する詳細情報を表示することもできます。 ただし、このツールには
KeySpec
情報は表示されません。 MMC スナップインで証明書を表示する方法の詳細については、「 方法: MMC スナップインで証明書を表示する」を参照してください。
詳細情報
期限切れ証明書
SQL Server では、構成時に証明書の有効性のみが確認されます。 たとえば、SQL Server 2019 (15.x) 以降のバージョンの Configuration Manager を使用して、期限切れの証明書をプロビジョニングすることはできません。 SQL Server は、証明書が既にプロビジョニングされた後に有効期限が切れた場合でも、問題なく実行されます。 ただし、Power BI などの一部のクライアント アプリケーションでは、各接続で証明書の有効性が確認され、SQL Server インスタンスが暗号化に期限切れの証明書を使用するように構成されている場合はエラーが発生します。 SQL Server 暗号化には期限切れの証明書を使用しないことをお勧めします。