証明書および Service Broker

このトピックでは、Service Broker リモート セキュリティのために SQL Server で証明書が使用される方法について説明します。Service Broker リモート セキュリティとは、ダイアログ セキュリティまたはトランスポート セキュリティを使用する操作のうち、複数の SQL Server インスタンスが関与するもののことです。

概要

Service Broker リモート セキュリティは、操作をインスタンスの外部から SQL Server データベース プリンシパルにマップします。この操作は、SQL Server の標準の権限チェックを使用して、そのデータベース プリンシパルのセキュリティ コンテキスト内で続行されます。たとえば、ダイアログ セキュリティを使用するメッセージ交換のメッセージが到着すると、Service Broker はそのメッセージ内の情報を使用して、メッセージ交換のリモート側のデータベース プリンシパルを識別します。次に SQL Server は、そのプリンシパルが転送先サービスをホストしているデータベースに接続する権限と、転送先サービスにメッセージを送信する権限を持っているかどうかを確認します。

SQL Server は、証明書を使用して、リモート データベースの ID を確認し、操作に対応するローカル データベース プリンシパルを識別します。そのため、SQL Server に証明書をインストールすると、証明書の秘密キーを保持するデータベースで信頼のステートメントが構成されます。インストールした証明書、および作成したリモート サービス バインドは、慎重に管理してください。

セキュリティに関する注意セキュリティに関する注意

信頼できる発行元の証明書以外はインストールしないでください。秘密キーは配布しないでください。

リモート サーバーの ID を確認するためには、SQL Server は、ローカル データベース プリンシパルが所有する証明書の公開キーで暗号化解除できる情報を受け取る必要があります。SQL Server が情報の暗号化を解除できれば、リモート データベースにはローカル証明書の公開キーに対応する秘密キーが格納されていることになります。SQL Server がリモート データベースの ID を確認すると、リモート データベースはローカル データベース プリンシパルが持っている権限で動作することができます。

トランスポート セキュリティの場合、各データベースは他のデータベースを信頼する必要があります。トランスポート セキュリティでは、証明書または Windows 認証を使用できます。トランスポート セキュリティの詳細については、「Service Broker トランスポート セキュリティ」を参照してください。

ダイアログ セキュリティの場合、ダイアログの発信側は対象を信頼する必要があり、かつ対象の ID を確認できる必要があります。ただし、対象は、識別情報を提供しない発信側からの接続を許可することができます。この場合、発信側は対象サービスをホストしているデータベースのパブリック ロールを使用します。ダイアログ セキュリティでは、常に証明書を使用します。ダイアログ セキュリティの詳細については、「Service Broker ダイアログ セキュリティ」を参照してください。

SQL Server では、証明書を使用した Service Broker のセキュリティを自動的に構成する方法は提供されていません。

証明書の要件

Service Broker のセキュリティに使用する場合、証明書は次の要件を満たしている必要があります。

  • キー係数は 2048 未満である必要があります。

  • 証明書の合計の長さは 32 KB 未満である必要があります。

  • 件名を指定する必要があります。

  • 有効期限日付を指定する必要があります。

  • キー長は、64 ビットの倍数である必要があります。

Transact-SQL ステートメント CREATE CERTIFICATE で作成した自己署名証明書は、前に示した要件を満たします。ファイルから読み込んだ証明書は、これらの要件を満たさない場合があります。

証明書を SQL Server に保存する場合は、データベースのマスタ キーを使用して、証明書を暗号化する必要があります。Service Broker では、パスワードだけで暗号化された証明書は使用できません。また、データベースのマスタ キーは、インスタンスのサービス キーを使用して暗号化する必要があります。それ以外の場合、Service Broker はマスタ キーを開くことができません。

SQL Server が証明書を使用してメッセージ交換を開始するには、証明書に ACTIVE FOR BEGIN_DIALOG とマーク付けする必要があります。既定では、証明書はダイアログの開始に関してアクティブとマーク付けされています。ただし、サービスに関するセキュリティ構成を更新する間、証明書を一時的に非アクティブ化することができます。詳細については、「CREATE CERTIFICATE (Transact-SQL)」および「ALTER CERTIFICATE (Transact-SQL)」を参照してください。