TDS 8.0 と TLS 1.3 のサポート

適用対象: SQL Server 2022 (16.x)

SQL Server 2022 (16.x) では、表形式データ ストリーム (TDS) 8.0 と、TDS 8.0 を使用する場合はトランスポート層セキュリティ (TLS) 1.3 がサポートされます。

表形式データ ストリーム (TDS) プロトコルは、クライアントが SQL Server に接続するために使用するアプリケーション層プロトコルです。一方、SQL Server ではトランスポート層セキュリティ (TLS) を使用して、SQL Server のインスタンスとクライアント アプリケーションの間でネットワーク経由で送信されるデータを暗号化します。

TDS はセキュリティで保護されたプロトコルですが、以前のバージョンの SQL Server では、暗号化をオフにするか、無効にすることができます。 SQL Server を使用している間に必須となる暗号化の標準を満たすために、TDS プロトコルのイテレーション TDS 8.0 が導入されました

これにより、TLS ハンドシェイクが TDS メッセージの前に行われ、TDS セッションを TLS でラップして暗号化が適用され、TDS 8.0 が HTTPS やその他の Web プロトコルに適合します。 標準的なネットワーク アプライアンスでフィルター処理し、SQL クエリを安全にパススルーできるようになったので、TDS トラフィックの管理のしやすさが大きく改善します。

TDS 8.0 のもう 1 つのベネフィットが、TLS 1.3 以降の標準との互換性の向上です。 TDS 8.0 は、TLS 1.2 とそれ以前の TLS バージョンとも完全に互換性があります。

TDS のしくみ

表形式データ ストリーム (TDS) プロトコルは、クライアントとデータベース サーバー システム間の要求と応答の転送に使用されるアプリケーション レベルのプロトコルです。 このようなシステムでは、通常、クライアントはサーバーと有効期間が長い接続を確立します。 トランスポート レベルのプロトコルを使用して接続が確立されると、TDS メッセージがクライアントとサーバー間の通信に使用されます。

TDS セッションの有効期間には、次の 3 つのフェーズがあります。

  • 初期化
  • 認証
  • データ交換

暗号化は初期フェーズ中にネゴシエートされますが、TDS ネゴシエーションは暗号化されていない接続を介して行われます。 以前のバージョンから TDS 8.0 への SQL Server 接続は次のようになります。

TCP ハンドシェイク ➡️ TDS prelogin (クリアテキスト) と応答 (クリアテキスト) ➡️ TLS ハンドシェイク➡️認証 (暗号化) ➡️ データ交換 (暗号化または暗号化されていない可能性があります)

TDS 8.0 の導入により、SQL Server 接続は次のようになります。

TCP ハンドシェイク ➡️ TLS ハンドシェイク ➡️ TDS prelogin (暗号化) と応答 (暗号化) ➡️ 認証 (暗号化) ➡️ データ交換 (暗号化)

TLS 1.2 と TLS 1.3 の違い

TLS 1.3 を使用すると、ハンドシェイク フェーズ中のラウンド トリップの回数が 2 から 1 に減り、TLS 1.2 よりも高速で安全になります。 サーバー証明書を含む server hello パケットが暗号化され、1 回のラウンド トリップ時間 (1-RTT) 再開が中止され、クライアント キー共有に基づく 0-RTT 再開に置き換えられます。 TLS 1.3 のセキュリティの強化は、特定の暗号とアルゴリズムの廃止に起因します。

TLS 1.3 で削除されたアルゴリズムと暗号の一覧を次に示します。

  • RC4 ストリーム暗号
  • RSA キー交換
  • SHA-1 ハッシュ関数
  • CBC (ブロック) モード暗号
  • MD5 アルゴリズム
  • 一時的でないさまざまな Diffie-Hellman グループ
  • EXPORT-strength 暗号
  • DES
  • 3DES

厳密な接続暗号化

TDS 8.0 を活用するには、SQL Server 2022 (16.x) を追加の接続暗号化の種類として SQL Server ドライバー (Encrypt=strict) に追加しましたstrictstrict の接続暗号化の種類を使用するには、ODBC または OLE DB ドライバーの最新バージョンを ダウンロードします。

strict の接続暗号化による中間者攻撃を防ぐため、ユーザーは TrustServerCertificate オプションを true に設定して、サーバーが提供する証明書を信頼することができません。 代わりに、ユーザーは HostNameInCertificate オプションを使用して、信頼する必要がある証明書を指定します。 サーバーによって提供される証明書は、証明書の検証に合格する必要があります。

接続文字列の暗号化プロパティに対するその他の変更

接続文字列の暗号化のために次が追加されています。

Keyword Default 説明
Encrypt false 既存の動作
true の場合、SQL Server は、サーバーに証明書がインストールされている場合、クライアントとサーバー間で送信されるすべてのデータに TLS 暗号化を使用します。 認識される値は truefalseyes および no です。 詳細については、「接続文字列の構文」を参照してください。

動作の変更
strict に設定すると、SQL Server は、クライアントとサーバーの間で送信されるすべてのデータに TDS 8.0 を使用します。

mandatorytrue、または yes に設定すると、SQL Server に証明書がインストールされている場合に、クライアントとサーバー間で送信されるすべてのデータに TLS/SSL 暗号化による TDS 7.x を使用します。

optionalfalse、または no に設定すると、接続で TDS 7.x が使用され、SQL Server で必要な場合にのみ暗号化されます。
TrustServerCertificate false 既存の動作
ドライバーによってサーバーの TLS/SSL 証明書が検証されないようにするには、true に設定します。 true の場合、通信レイヤーが TLS で暗号化されていると、サーバーの TLS/SSL 証明書は自動的に信頼されます。

false の場合、ドライバーによってサーバーの TLS/SSL 証明書が検証されます。 サーバー証明書の検証が失敗した場合は、ドライバーでエラーが発生して接続が終了します。 既定値は false です。 TLS/SSL 接続が成功するには、serverName に渡される値が、サーバー証明書に含まれる Subject Alternate NameCommon Name (CN) または DNS 名と厳密に一致している必要があります。

動作の変更
[暗号化]strict に設定されている場合、この設定により、サーバー証明書の検証に使用する証明書の場所が指定されます (完全一致)。 ドライバーでは、PEM、DER、CER のファイル拡張子がサポートされます。

[暗号化] が true または false に設定され、TrustServerCertificate プロパティが指定されていないか、または nulltrue、または false に設定されている場合、ドライバーは接続 URL の ServerName のプロパティ値をホスト名として使用して、SQL Server の TLS/SSL 証明書を検証します。
HostNameInCertificate null SQL Server TLS/SSL 証明書の検証に使われるホスト名。 HostNameInCertificate プロパティが指定されていないか、null に設定されている場合、ドライバーはServerName のプロパティ値をホスト名として使用して、SQL Server の TLS/SSL 証明書を検証します。

次の手順