SQL Server の証明書要件
この記事では、SQL Server の証明書要件と、証明書がその要件を満たしているかどうかを確認する方法について説明します。
SQL Server 暗号化の証明書要件
SQL Server 暗号化に TLS を使用するには、次の条件を満たす証明書 (3 つのデジタルの種類のいずれか) をプロビジョニングする必要があります。
証明書がローカル コンピューターの証明書ストアまたは SQL Server サービス アカウントの証明書ストアに存在すること。 ローカル コンピューターの証明書ストアをお勧めします。それにより、SQL Server スタートアップ アカウントの変更による証明書の再構成が回避されるためです。
SQL Server のサービス アカウントに、TLS 証明書にアクセスするために必要なアクセス許可があること。 詳細については、「接続を暗号化するために SQL Server データベース エンジンを構成する」を参照してください。
現在のシステム時刻が、証明書の [有効期間の開始] プロパティの値から証明書の [有効期間の終了] プロパティの値までの範囲にあること。 詳細については、「期限切れ証明書」を参照してください。
Note
証明書がサーバー認証に使用されていること。 つまり、証明書の [拡張キー使用法] プロパティで [サーバー認証] (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 の完全修飾 ドメイン名 (FQDN) および NetBIOS を含める必要があります。
クライアントは、サーバーが使用する証明書の所有権を検証できる必要があります。 サーバー証明書に署名した証明機関の公開キー証明書をクライアントが持っている場合は、それ以上の構成は必要ありません。 Microsoft Windows には、多くの証明機関の公開キー証明書が含まれています。 サーバー証明書に署名した公的または私的な証明機関に対する公開キー証明書をクライアントが持っていない場合は、SQL Server に接続しようとする各クライアントに、サーバー証明書に署名した証明機関の公開キー証明書をインストールする必要があります。
重要
証明書がコンピューター ストアに存在していても上記の一覧の一部の要件しか満たしておらず、その使用が SQL Server 構成マネージャーまたはレジストリ エントリによって手動で構成されている場合、SQL Server は開始されません。 すべての要件を満たす別の証明書を選択するか、要件を満たすものをプロビジョニングできるようになるまで証明書が SQL Server によって使用されないようにするか、または「SQL Server で生成された自己署名証明書」で説明されているように、自動生成された証明書を使用します。
証明書が要件を満たしているかどうかを確認する
SQL Server 2019 (15.x) 以降のバージョンでは、SQL Server 構成マネージャーによって構成フェーズそのものの間にすべての証明書要件が自動的に検証されます。 証明書を構成した後に SQL Server が正常に開始された場合は、SQL Server でその証明書を使用できることを示しています。 ただし、一部のクライアント アプリケーションには、暗号化に使用できる証明書に関する他の要件がまだ存在する場合があり、使用されているアプリケーションに応じてさまざまなエラーが発生する可能性があります。 そのシナリオでは、クライアント アプリケーションのサポート ドキュメントで、この問題の詳細を確認する必要があります。
次のいずれかの方法を使用して、SQL Server で使用する証明書の有効性を確認できます。
sclcheck ツール:
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) 以降のバージョンの構成マネージャーを使用して期限切れの証明書をプロビジョニングすることはできません。 SQL Server は、証明書がプロビジョニングされた後に有効期限が切れた場合でも、問題なく実行されます。 ただし、Power BI などの一部のクライアント アプリケーションでは、接続のたびに証明書の有効性が確認され、SQL Server インスタンスが期限切れの証明書を暗号化に使用するように構成されている場合は、エラーが発生します。 期限切れの証明書を SQL Server 暗号化に使用しないことをお勧めします。