SQL Server への接続の暗号化

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

SSL (Secure Sockets Layer)

Microsoft SQL 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 証明書を読み込むには、証明書が次の条件を満たしている必要があります。

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

  • 現在のシステム時刻が証明書の Valid from プロパティから Valid to プロパティまでの範囲であること。

  • 証明書がサーバー認証に使用されていること。この場合は、証明書の Enhanced Key Usage プロパティが Server Authentication (1.3.6.1.5.5.7.3.1) に指定されている必要があります。

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

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

  • SQL Server 2008 R2 および SQL Server 2008 R2 Native Client では、ワイルドカード証明書がサポートされています。その他のクライアントでは、ワイルドカード証明書がサポートされない場合があります。詳細については、クライアントのマニュアルおよび KB258858 を参照してください。

SQL Server Native Client の証明書の要件

以前は、緩和された検証により、サブジェクトに完全修飾ドメイン名 (FQDN) が指定されている証明書で "SERVER=shortname; ENCRYPT=yes" を使用するアプリケーションでも接続できましたが、SQL Server 2008 R2 では、セキュリティ強化のために、証明書のサブジェクトが厳密に一致することが必須とされるため、緩和された検証に依存しているアプリケーションでは次のいずれかの対処が必要になります。

  • 接続文字列で FQDN を使用する。

    • この方法を使用する場合は、接続文字列の SERVER キーワードがアプリケーションの外部で構成されていればアプリケーションを再コンパイルする必要はありません。

    • この方法は、接続文字列がハードコードされているアプリケーションには使用できません。

    • この方法は、データベース ミラーリングを使用するアプリケーションには使用できません (ミラー化されたサーバーは簡易名を使用して応答するため)。

  • shortname の別名を追加して FQDN にマップする。

    • この方法は、接続文字列がハードコードされているアプリケーションにも使用できます。

    • この方法は、データベース ミラーリングを使用するアプリケーションには使用できません (プロバイダーは、受け取ったフェールオーバー パートナー名の別名を参照しないため)。

  • shortname に対して発行された証明書を使用する。

    • この方法は、すべてのアプリケーションに使用できます。

クラスターでの暗号化

フェールオーバー クラスターで暗号化を使用する場合、フェールオーバー クラスター内のすべてのノードに、フェールオーバー クラスター化インスタンスの完全修飾 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 のマニュアルまたはネットワークに関するドキュメントを参照してください。