すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:SSL暗号化機能の設定

最終更新日:Sep 30, 2024

ApsaraDB RDS for SQL ServerのSecure Sockets Layer (SSL) 暗号化機能は、転送中のデータの暗号化に使用されます。 この機能は、内部ネットワークまたはインターネットを介した接続のコンプライアンスとセキュリティが必要なシナリオに適しています。 この機能により、Alibaba Cloudが提供する証明書またはカスタム証明書を使用して、転送中のデータを暗号化できます。 この機能により、RDSインスタンスの内部エンドポイントに確立された接続に対して、強制的なSSL暗号化を実行することもできます。 これにより、転送中のデータの機密性が確保されます。

説明

SSL暗号化機能を使用して、RDSインスタンスとクライアント間で送信されるデータを暗号化できます。 これにより、データが第三者によって盗聴、傍受、または改ざんされるのを防ぎます。

SSL暗号化機能を有効にすると、RDSインスタンスとクライアント間で確立されている接続に対して強制的なSSL暗号化を実行するかどうかを判断できます。

RDSインスタンスのSSL暗号化機能を有効にすると、サーバー証明書、公開鍵、および秘密鍵が生成されます。

暗号化された接続が確立されると、システムは、公開鍵を含むサーバ証明書をクライアントに送信する。 クライアントは、受信した公開鍵を用いて、生成した対称鍵を暗号化する。 次に、システムは、秘密鍵を使用して対称鍵を復号化する。 このように、RDSインスタンスとクライアントは対称キーを使用してデータを暗号化および復号化します。 これにより、通信の機密性が確保される。 クライアントは、認証局 (CA) 証明書を使用して、受信したサーバー証明書を検証し、RDSインスタンスのIDを確認し、中間者攻撃を防ぐこともできます。

説明
  • トランスポート層セキュリティ (TLS) は、SSLの直接の後継です。 このトピックでは、SSLはTLSとSSLを指します。

  • ApsaraDB RDS for SQL Serverは、TLS 1.0、TLS 1.1、およびTLS 1.2をサポートしています。

前提条件

暗号化にカスタムキーを使用する前に、次の要件が満たされていることを確認してください。

使用上の注意

  • SSL証明書は1年間有効です。 使用済みSSL証明書の有効期限が切れる前に、SSL証明書の有効期間を更新する必要があります。 SSL証明書の有効期間を更新しないと、暗号化されたネットワーク接続を使用するアプリケーションまたはクライアントはRDSインスタンスに接続できません。 SSL証明書の有効期間を更新する方法の詳細については、「SSL証明書の有効期間の更新」をご参照ください。

  • SSL暗号化機能を有効または無効にするか、RDSインスタンスのSSL証明書を更新すると、RDSインスタンスが再起動します。 再起動中、RDSインスタンスは数分間使用できません。

  • SSL暗号化は、CPU利用率の大幅な増加を引き起こし得る。 RDSインスタンスのパブリックエンドポイントへの接続を暗号化する必要がある場合にのみ、SSL暗号化機能を有効にすることを推奨します。

制限事項

ステップ1: RDSインスタンスのSSL暗号化機能を有効にする

  1. ApsaraDB RDSコンソールにログインし、[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 RDSインスタンスを見つけ、インスタンスIDをクリックします。

  2. 左側のナビゲーションウィンドウで、セキュリティコントロール をクリックします。

  3. SSL タブで、無効 をオンにします。

  4. SSL の設定 ダイアログボックスで、暗号化方法を選択し、設定を行います。

    Alibaba Cloudによって自動的に生成されたキーの使用

    image

    パラメーター

    必須

    説明

    保護されたエンドポイントを選択します:

    継続する

    SSL暗号化機能を有効にするエンドポイントを選択します。 ビジネス要件に基づいて、RDSインスタンスの内部エンドポイントまたはパブリックエンドポイントに確立された接続を暗号化できます。 両方のタイプの接続を暗号化することはできません。

    説明

    RDSインスタンスのパブリックエンドポイントへの接続を暗号化する場合は、パブリックエンドポイントが適用されていることを確認する必要があります。 詳細については、「パブリックエンドポイントの申請またはリリース」をご参照ください。

    強制暗号化を有効にするかどうか

    継続しない

    強制的なSSL暗号化をサポートするかどうかを指定します。 強制的なSSL暗号化は、RDSインスタンスの内部エンドポイントに確立された接続でのみサポートされます。 Forceful Encryptionを有効にすると、CA証明書をアップロードする必要はなく、暗号化されていない接続はサポートされません。

    説明
    • この機能は、仮想プライベートクラウド (VPC) に存在するRDSインスタンスに対してのみ有効にできます。 詳細については、「ネットワークタイプの変更」をご参照ください。

    • RDSインスタンスのパブリックエンドポイントに対して確立されている接続では、強制的なSSL暗号化はサポートされていません。 RDSインスタンスの内部エンドポイントとパブリックエンドポイントに確立された接続が存在する場合、RDSインスタンスの内部エンドポイントに確立された接続に対してForceful Encryptionを有効にする場合は、まずパブリックエンドポイントをリリースする必要があります。 詳細については、「パブリックエンドポイントの申請またはリリース」をご参照ください。

    サポートされている最小 TLS バージョンがサポートされています

    継続しない

    サポートされているTLSの最小バージョンを選択します。 有効な値: 1.0、1.1、1.2

    たとえば、このパラメーターを1.1に設定した場合、サーバーはTLS 1.1およびTLS 1.2プロトコルを介した接続のみを受け入れます。

    カスタムキーの暗号化

    説明

    暗号化にカスタムキーを使用する前に、前提条件に記載されている要件が満たされていることを確認してください。

    1. [PFX形式の証明書をOSSにアップロード] ステップで、[次のステップ] をクリックします。

    2. [カスタムキー暗号化の使用] ステップで、必要なパラメーターを設定し、[次のステップ] をクリックします。 下表に、各パラメーターを説明します。

      image

      パラメーター

      説明

      OSSバケット

      証明書が存在するOSSバケットを選択します。

      証明書

      必要なPFX証明書を選択します。

      Password

      証明書のパスワードを入力します。

    3. [一般オプションの設定] ステップで、次のパラメーターを設定します。

      image

      パラメーター

      必須

      説明

      保護されたエンドポイントを選択します:

      継続する

      SSL暗号化機能を有効にするエンドポイントを選択します。 ビジネス要件に基づいて、RDSインスタンスの内部エンドポイントまたはパブリックエンドポイントに確立された接続を暗号化できます。 両方のタイプの接続を暗号化することはできません。

      説明

      RDSインスタンスのパブリックエンドポイントへの接続を暗号化する場合は、パブリックエンドポイントが適用されていることを確認する必要があります。 詳細については、「パブリックエンドポイントの申請またはリリース」をご参照ください。

      強制暗号化を有効にするかどうか

      継続しない

      強制的なSSL暗号化をサポートするかどうかを指定します。 強制的なSSL暗号化は、RDSインスタンスの内部エンドポイントに確立された接続でのみサポートされます。 Forceful Encryptionを有効にすると、CA証明書をアップロードする必要はなく、暗号化されていない接続はサポートされません。

      説明
      • この機能は、仮想プライベートクラウド (VPC) に存在するRDSインスタンスに対してのみ有効にできます。 詳細については、「ネットワークタイプの変更」をご参照ください。

      • RDSインスタンスのパブリックエンドポイントに対して確立されている接続では、強制的なSSL暗号化はサポートされていません。 RDSインスタンスの内部エンドポイントとパブリックエンドポイントに確立された接続が存在する場合、RDSインスタンスの内部エンドポイントに確立された接続に対してForceful Encryptionを有効にする場合は、まずパブリックエンドポイントをリリースする必要があります。 詳細については、「パブリックエンドポイントの申請またはリリース」をご参照ください。

      サポートされている最小 TLS バージョンがサポートされています

      継続しない

      サポートされているTLSの最小バージョンを選択します。 有効な値: 1.0、1.1、1.2

      たとえば、このパラメーターを1.1に設定した場合、サーバーはTLS 1.1およびTLS 1.2プロトコルを介した接続のみを受け入れます。

  5. [OK] をクリックします。

    SSL暗号化機能を有効にするのに約1分かかります。 ページを更新して、RDSインスタンスのステータスを表示できます。

手順2: SSL証明書のダウンロード

SSL暗号化機能を使用して、CA証明書なしでRDSインスタンスに接続できます。 CA証明書をダウンロードして使用することを推奨します。 CA証明書を使用して、SSLハンドシェイク中に受信したサーバー証明書を確認できます。 これにより、RDSインスタンスのIDを確認し、man-in-the-middle攻撃を防ぐことができます。

  1. ApsaraDB RDSコンソールにログインし、[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 RDSインスタンスを見つけ、インスタンスIDをクリックします。

  2. 左側のナビゲーションウィンドウで、セキュリティコントロール をクリックします。

  3. SSLタブで、CA 証明書のダウンロード をクリックします。

    ダウンロードしたファイルは、次のファイルを含むパッケージです。

    • P7Bファイル: Windowsオペレーティングシステムで使用されるSSL証明書ファイル。

    • PEMファイル: Windows以外のオペレーティングシステムまたはWindowsで実行されていないアプリケーションで使用されるSSL証明書ファイル。

    • JKSファイル: Javaでサポートされているトラストストアに保存されているSSL証明書ファイル。 このファイルを使用して、SSL証明書チェーンからJavaベースのアプリケーションにSSL証明書ファイルをインポートできます。 デフォルトのパスワードはapsaradbです。

    重要

    JDK 7またはJDK 8でJKSファイルを使用する場合は、アプリケーションが存在するホストのjre/lib/security/Java.securityファイルにある次のデフォルトのJDKセキュリティ設定項目を変更する必要があります。

    jdk.tls.disabledAlgorithms=SSLv3, RC4, DH keySize < 224
    jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024

    これらの設定を変更しないと、次のエラーが報告されます。 ほとんどの場合、他の同様のエラーも無効なJavaセキュリティ設定によって発生します。

    javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints

ステップ3: SSL証明書の設定

SSL暗号化機能を有効にした後、アプリケーションまたはクライアントでSSL証明書を設定する必要があります。 このトピックでは、SQL Server Management Studio (SSMS) を使用してSSL証明書をインストールする方法の例を示します。 他のアプリケーションやクライアントを使用する場合は、関連する手順を参照してください。

  1. デスクトップの左下隅の検索ボックスにcertmgr.mscと入力し、certmgr.mscを開きます。

  2. [certmgr] ダイアログボックスで、[Trusted Root Certification Authorities] を右クリックします。

  3. [すべてのタスク] > [インポート] を選択します。

  4. [次へ] をクリックします。

  5. [証明書のインポートウィザード] ダイアログボックスで、[参照] をクリックしてダウンロードしたSSL証明書をインポートし、[次へ] をクリックします。 SSL証明書のダウンロード方法の詳細については、「手順2: SSL証明書のダウンロード」をご参照ください。

  6. ビジネス要件に基づいてSSL証明書を保存するディレクトリを選択し、[次へ] をクリックします。

  7. [完了] をクリックし、証明書がインポートされるまで待ちます。

  8. SSMSを開き、ダイアログボックスの右下隅にある [オプション] をクリックします。

    image.png

  9. [接続のプロパティ] タブで、[接続の暗号化][サーバー証明書の信頼] を選択し、[接続] をクリックします。

    image.png

  10. 次のステートメントを実行します。 TRUEが返された場合、接続は暗号化されます。

    SELECT ENCRYPT_OPTION FROM SYS.DM_EXEC_CONNECTIONS WHERE SESSION_ID = @@SPID

付録: SSLを介した接続のサンプルコード

# -*- coding:utf-8 -*-

import ssl
import pyodbc

# Create an SSL context for establishing an SSL connection in Python.
context = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH, cafile="D:\ca\ApsaraDB-CA-Chain.pem")

# Establish a connection.
# SERVER specifies the IP address of the server on which the required database resides. DATABASE specifies the name of the database that you want to connect. UID specifies the username that is required to log on to the database. PWD specifies the password that is required to log on to the database. Encrypt specifies whether to enable SSL encryption. The value of yes indicates that SSL encryption is enabled. 
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=rm-2zec********.sqlserver.rds.aliyuncs.com;DATABASE=master;UID=zhttest;PWD=zht****;Encrypt=yes', ssl=context)
cursor = conn.cursor()
cursor.execute('SELECT @@version')

rows = cursor.fetchall()

for row in rows:
    print(row)

# Close the connection.
conn.close()
using System;
using System.Data.SqlClient;

namespace SqlConnectionSSLExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // Establish a connection.
            // Data Source specifies the IP address of the server on which the required SQL Server database resides. Initial Catalog specifies the name of the required database that you want to connect. User ID specifies the username that is required to connect to the database. Password specifies the password that is required to connect to the database. Encrypt specifies whether to enable SSL-encrypted transmission. The value of true indicates that SSL encryption is enabled. 
            string connectionString = "Data Source=rm-2ze********.sqlserver.rds.aliyuncs.com;Initial Catalog=master;User ID=zhttest;Password=zht****;Encrypt=true;";
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                // Open the connection.
                connection.Open();
                try
                {
                    // Execute an SQL statement.
                    SqlCommand cmd = new SqlCommand("SELECT @@version", connection);

                    string result = cmd.ExecuteScalar().ToString();

                    Console.WriteLine(result);
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Error: {ex.Message}");
                }
            }
        }
    }
}

関連する API

次のステップ

証明書の有効期間の更新

SSL証明書は1年間有効です。 使用済みSSL証明書の有効期限が切れる前に、SSL証明書の有効期間を更新する必要があります。 SSL証明書の有効期間を更新しないと、暗号化されたネットワーク接続を使用するアプリケーションまたはクライアントはRDSインスタンスに接続できません。 SSL証明書の有効期限が近づいている場合、Alibaba Cloudは、カスタム証明書を使用してSSL暗号化を有効にするユーザーに、 電子メールと内部メッセージ。 [イベントセンター] ページで内部メッセージを表示できます。 SSL証明書の有効期限が切れる前に、アプリケーションまたはクライアントがRDSインスタンスに接続できるように、SSL証明書の有効期間を更新する必要があります。

重要

SSL証明書の有効期間を更新すると、RDSインスタンスが再起動します。 SSL証明書の有効期間を更新するときは、注意して続行してください。

  1. ApsaraDB RDSコンソールにログインし、[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 RDSインスタンスを見つけ、インスタンスIDをクリックします。

  2. 左側のナビゲーションウィンドウで、セキュリティコントロール をクリックします。

  3. SSL タブで、[有効性の更新] をクリックします。 更新证书有效期

SSL暗号化機能の無効化

重要
  • SSL暗号化機能を無効にすると、RDSインスタンスが再起動します。 この場合、システムはプライマリ /セカンダリの切り替えをトリガーして、ワークロードへの影響を軽減します。 オフピーク時にはSSL暗号化機能を無効にすることをお勧めします。

  • SSL暗号化機能を無効にすると、アクセスパフォーマンスは向上しますが、セキュリティは低下します。 安全な環境でのみSSL暗号化機能を無効にすることを推奨します。

  • SSL暗号化機能を無効にすると、アプリケーションは非SSL接続でのみRDSインスタンスに接続できます。

  1. [インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDSインスタンスを見つけ、インスタンスのIDをクリックします。

  2. 左側のナビゲーションウィンドウで、セキュリティコントロール をクリックします。

  3. 表示されるページで、[SSL] タブをクリックします。

  4. SSL暗号化をオフにします。 表示されたメッセージボックスで [OK] をクリックします。

接続暗号化の詳細を表示

SQL Serverでは、次のステートメントを実行して、現在の接続に対してSSL暗号化機能が有効になっているかどうかを確認できます。

SELECT session_id,encrypt_option
FROM sys.dm_exec_connections;
GO

sys.dm_exec_connections動的管理ビューのクエリ時に現在の接続のセッションIDが返され、encrypt_optionパラメーターの値がtrueの場合、接続のSSL暗号化機能が有効になります。

よくある質問

期限切れのSSL証明書を更新しないと、ビジネスにどのような影響がありますか? RDSインスタンスでエラーが発生したか、データセキュリティが低下しましたか。

期限切れのSSL証明書を更新しない場合でも、RDSインスタンスは期待どおりに実行され、セキュリティリスクは発生しません。 ただし、アプリケーションはRDSインスタンスへの暗号化接続を確立できません。