SQL Server への接続の暗号化

SQL Server では、SSL (Secure Sockets Layer) がサポートされており、インターネット プロトコル セキュリティ (IPSec) と互換性があります。

SSL (Secure Sockets Layer)

MicrosoftSQL Server では、SQL Server インスタンスとクライアント アプリケーション間をネットワーク経由で送信されるデータの暗号化に SSL (Secure Sockets Layer) を使用できます。SSL 暗号化はプロトコル レイヤ内で実行され、DB Library および MDAC 2.53 クライアントを除くすべての SQL Server クライアントがこれを使用できます。

SSL は、クライアント接続で暗号化が要求された場合に、サーバーの検証に使用することができます。SQL Server のインスタンスが公的な証明機関から証明書を割り当てられたコンピュータで実行されている場合、そのコンピュータの ID と SQL Server のインスタンスは、信頼されているルート機関につながる証明書のチェーンにより保証されます。このようなサーバー検証では、クライアント アプリケーションが実行されているコンピュータが、サーバーで使用する証明書のルート機関を信頼するように構成されている必要があります。自己署名入りの証明書を使用して暗号化を行うことは可能であり、次のセクションで説明されていますが、自己署名入りの証明書によって提供される保護には制限があります。

SSL で使用される暗号化のレベル (40 ビットまたは 128 ビット) は、アプリケーション コンピュータとデータベース コンピュータで実行されている Microsoft Windows オペレーティング システムのバージョンによって異なります。

SSL 暗号化を有効にすると、SQL Server のインスタンスとアプリケーションの間でネットワークを経由して転送されるデータのセキュリティが強化されます。ただし、暗号化を有効にすると、パフォーマンスが低下します。SQL Server とクライアント アプリケーション間のすべてのトラフィックが SSL で暗号化される場合は、次に示す追加の処理が必要になります。

  • 接続時には、追加のネットワーク ラウンド トリップが必要です。

  • アプリケーションから SQL Server インスタンスに送信されたパケットは、クライアント Net-Library によって暗号化され、サーバー Net-Library によって暗号化解除される必要があります。

  • SQL Server インスタンスからアプリケーションに送信されたパケットは、サーバー Net-Library によって暗号化され、クライアント Net-Library によって暗号化解除される必要があります。

SQL Server 用の SSL の構成

次の手順では、SSL を SQL Server 用に構成する方法について説明します。

SSL を構成するには

  1. サーバー コンピュータの Windows 証明書ストアに証明書をインストールします。

  2. [スタート] ボタンをクリックし、[すべてのプログラム]、[Microsoft SQL Server][構成ツール] の順にポイントして、[SQL Server 構成マネージャ] をクリックします。

  3. [SQL Server ネットワークの構成] を展開し、任意のサーバーのプロトコルを右クリックして、[プロパティ] をクリックします。

    注意注意

    これは、ツールの左ペインにある <instance_name> セクションのプロトコルであり、右ペインにある特定のプロトコルではありません。

  4. [証明書] タブで、証明書を使用するようにデータベース エンジンを構成します。

  5. [フラグ] タブで、プロトコル暗号化オプションを表示または指定します。ログイン パケットは常に暗号化されます。

    • データベース エンジンの [ForceEncryption] オプションを [はい] に設定すると、すべてのクライアント/サーバー通信が暗号化され、暗号化がサポートされていないクライアントによるアクセスは拒否されます。

    • データベース エンジンの [ForceEncryption] オプションを [いいえ] に設定すると、暗号化はクライアント アプリケーションから要求できますが、必須ではありません。

    • [ForceEncryption] の設定を変更した後には、SQL Server を再起動する必要があります。

    クライアント アプリケーションが SQL Server に接続する際に転送される (ログイン パケット内の) 資格情報は常に暗号化されます。SQL Server は、可能な限り、信頼されている証明機関から発行された証明書を使用します。信頼された証明書がインストールされていない場合は、SQL Server によって、インスタンスの起動時に自己署名入り証明書が生成され、その証明書を使用して資格情報が暗号化されます。この自己署名入り証明書はセキュリティの強化には役立ちますが、サーバーによる ID のなりすましに対する保護は提供されません。自己署名入りの証明書を使用し、[ForceEncryption] オプションの値を [はい] に設定すると、SQL Server とクライアント アプリケーション間をネットワーク経由で転送されるすべてのデータは、自己署名入り証明書を使用して暗号化されます。

    注記注意

    自己署名入りの証明書を使用して暗号化される SSL 接続では、強力なセキュリティは提供されません。このような接続では、中間者攻撃による被害を受けやすくなります。実稼働環境やインターネットに接続しているサーバーでは、自己署名入りの証明書を使用した SSL 接続は使用しないことをお勧めします。

証明書の要件

SQL Server で SSL 証明書を読み込むには、証明書が次の条件を満たしている必要があります。

  • 証明書がローカル コンピュータの証明書ストアまたは現在のユーザーの証明書ストアに存在すること。

  • 現在のシステム時刻が証明書の "有効期間の開始日" プロパティから "有効期間の終了日" プロパティまでの範囲であること。

  • 証明書がサーバー認証に使用されていること。この場合は、証明書の "拡張キー使用法" プロパティが「サーバー認証 (1.3.6.1.5.5.7.3.1)」に指定されている必要があります。

  • 証明書が AT_KEYEXCHANGEKeySpec オプションを使用して作成されていること。通常、証明書のキー使用法プロパティ (KEY_USAGE) には、キーの暗号化 (CERT_KEY_ENCIPHERMENT_KEY_USAGE) も含まれます。

  • 証明書の "Subject" プロパティで、共通名 (CN) がサーバー コンピュータのホスト名または完全修飾ドメイン名 (FQDN) と同一であると示されていること。SQL Server がフェールオーバー クラスタで実行されている場合、共通名は仮想サーバーのホスト名または FQDN と一致する必要があり、フェールオーバー クラスタ内のすべてのノードに証明書を提供する必要があります。

クラスタでの暗号化

フェールオーバー クラスタで暗号化を使用する場合、フェールオーバー クラスタ内のすべてのノードに、フェールオーバー クラスタ化インスタンスの完全修飾 DNS 名を使用してサーバー証明書をインストールする必要があります。たとえば、test1.your company.comtest2. your company.com という 2 つのノードで構成されたクラスタと、fcisql という SQL Server のフェールオーバー クラスタ化インスタンスが存在する場合は、fcisql.your company.com の証明書を取得し、その証明書を両方のノードにインストールする必要があります。フェールオーバー クラスタの暗号化を構成するには、[SQL Server ネットワークの構成][<server> のプロトコル] のプロパティ ボックスで、[ForceEncryption] を有効にします。

インターネット プロトコル セキュリティ (IPSec)

SQL Server のデータは、IPSec を使用して、転送時に暗号化することができます。IPSec は、クライアントとサーバーのオペレーティング システムによって提供されます。SQL Server の構成は必要ありません。IPSec の詳細については、Windows のマニュアルまたはネットワークに関するドキュメントを参照してください。