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をサポートしています。
前提条件
暗号化にカスタムキーを使用する前に、次の要件が満たされていることを確認してください。
Object Storage Service (OSS) が有効化されています。 詳細については、「OSSの有効化」をご参照ください。
ApsaraDB RDSのサービスアカウントは、Alibaba Cloudアカウントを使用してOSSバケットにアクセスすることで承認されます。
カスタム証明書は
PFX
形式で、OSSバケットにアップロードされます。 詳細については、「OSSコンソールを使用して開始する」、「マルチパートアップロード」、および「ossbrowserを使用する」をご参照ください。
使用上の注意
SSL証明書は1年間有効です。 使用済みSSL証明書の有効期限が切れる前に、SSL証明書の有効期間を更新する必要があります。 SSL証明書の有効期間を更新しないと、暗号化されたネットワーク接続を使用するアプリケーションまたはクライアントはRDSインスタンスに接続できません。 SSL証明書の有効期間を更新する方法の詳細については、「SSL証明書の有効期間の更新」をご参照ください。
SSL暗号化機能を有効または無効にするか、RDSインスタンスのSSL証明書を更新すると、RDSインスタンスが再起動します。 再起動中、RDSインスタンスは数分間使用できません。
SSL暗号化は、CPU利用率の大幅な増加を引き起こし得る。 RDSインスタンスのパブリックエンドポイントへの接続を暗号化する必要がある場合にのみ、SSL暗号化機能を有効にすることを推奨します。
制限事項
RDSインスタンスの読み書き分離エンドポイントへの接続では、SSL暗号化機能はサポートされていません。 この機能の詳細については、「読み取り専用ルーティングエンドポイントを有効にして読み書き分離を有効にする」をご参照ください。
RDSインスタンスでSSL暗号化機能が有効になっている場合、マイナーエンジンバージョンを更新したり、RDSインスタンスよりも後のメジャーエンジンバージョンを実行する一時的なRDSインスタンスを作成したりすることはできません。 詳細については、「マイナーエンジンバージョンの更新」または「必要なSQL Serverバージョンを実行する一時的なRDSインスタンスの作成」をご参照ください。
ステップ1: RDSインスタンスのSSL暗号化機能を有効にする
ApsaraDB RDSコンソールにログインし、[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 RDSインスタンスを見つけ、インスタンスIDをクリックします。
左側のナビゲーションウィンドウで、セキュリティコントロール をクリックします。
SSL タブで、無効 をオンにします。
SSL の設定 ダイアログボックスで、暗号化方法を選択し、設定を行います。
Alibaba Cloudによって自動的に生成されたキーの使用
パラメーター
必須
説明
保護されたエンドポイントを選択します:
継続する
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プロトコルを介した接続のみを受け入れます。
カスタムキーの暗号化
説明暗号化にカスタムキーを使用する前に、前提条件に記載されている要件が満たされていることを確認してください。
[PFX形式の証明書をOSSにアップロード] ステップで、[次のステップ] をクリックします。
[カスタムキー暗号化の使用] ステップで、必要なパラメーターを設定し、[次のステップ] をクリックします。 下表に、各パラメーターを説明します。
パラメーター
説明
OSSバケット
証明書が存在するOSSバケットを選択します。
証明書
必要な
PFX
証明書を選択します。Password
証明書のパスワードを入力します。
[一般オプションの設定] ステップで、次のパラメーターを設定します。
パラメーター
必須
説明
保護されたエンドポイントを選択します:
継続する
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プロトコルを介した接続のみを受け入れます。
[OK] をクリックします。
SSL暗号化機能を有効にするのに約1分かかります。 ページを更新して、RDSインスタンスのステータスを表示できます。
手順2: SSL証明書のダウンロード
SSL暗号化機能を使用して、CA証明書なしでRDSインスタンスに接続できます。 CA証明書をダウンロードして使用することを推奨します。 CA証明書を使用して、SSLハンドシェイク中に受信したサーバー証明書を確認できます。 これにより、RDSインスタンスのIDを確認し、man-in-the-middle攻撃を防ぐことができます。
ApsaraDB RDSコンソールにログインし、[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 RDSインスタンスを見つけ、インスタンスIDをクリックします。
左側のナビゲーションウィンドウで、セキュリティコントロール をクリックします。
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証明書をインストールする方法の例を示します。 他のアプリケーションやクライアントを使用する場合は、関連する手順を参照してください。
デスクトップの左下隅の検索ボックスにcertmgr.mscと入力し、certmgr.mscを開きます。
[certmgr] ダイアログボックスで、[Trusted Root Certification Authorities] を右クリックします。
を選択します。
[次へ] をクリックします。
[証明書のインポートウィザード] ダイアログボックスで、[参照] をクリックしてダウンロードしたSSL証明書をインポートし、[次へ] をクリックします。 SSL証明書のダウンロード方法の詳細については、「手順2: SSL証明書のダウンロード」をご参照ください。
ビジネス要件に基づいてSSL証明書を保存するディレクトリを選択し、[次へ] をクリックします。
[完了] をクリックし、証明書がインポートされるまで待ちます。
SSMSを開き、ダイアログボックスの右下隅にある [オプション] をクリックします。
[接続のプロパティ] タブで、[接続の暗号化] と [サーバー証明書の信頼] を選択し、[接続] をクリックします。
次のステートメントを実行します。 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証明書の有効期間を更新するときは、注意して続行してください。
ApsaraDB RDSコンソールにログインし、[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 RDSインスタンスを見つけ、インスタンスIDをクリックします。
左側のナビゲーションウィンドウで、セキュリティコントロール をクリックします。
SSL タブで、[有効性の更新] をクリックします。
SSL暗号化機能の無効化
SSL暗号化機能を無効にすると、RDSインスタンスが再起動します。 この場合、システムはプライマリ /セカンダリの切り替えをトリガーして、ワークロードへの影響を軽減します。 オフピーク時にはSSL暗号化機能を無効にすることをお勧めします。
SSL暗号化機能を無効にすると、アクセスパフォーマンスは向上しますが、セキュリティは低下します。 安全な環境でのみSSL暗号化機能を無効にすることを推奨します。
SSL暗号化機能を無効にすると、アプリケーションは非SSL接続でのみRDSインスタンスに接続できます。
[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDSインスタンスを見つけ、インスタンスのIDをクリックします。
左側のナビゲーションウィンドウで、セキュリティコントロール をクリックします。
表示されるページで、[SSL] タブをクリックします。
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インスタンスへの暗号化接続を確立できません。