SSL 暗号化は、ApsaraDB RDS for SQL Server インスタンスとクライアント間で転送されるデータを保護し、盗聴、傍受、改ざんを防ぎます。 Alibaba Cloud が生成した証明書を使用するか、カスタム証明書をアップロードできます。
開始前のアプローチの選択
SSL を使用するには 2 つの方法があります。
-
すべての接続に SSL を強制する:有効にすると、使用するエンドポイントにかかわらず、インスタンスへのすべてのクライアント接続で暗号化が必須になります。暗号化されていない接続は拒否され、クライアント側での CA 証明書は不要です。VPC インスタンスが必要です。
-
特定の接続 (内部またはパブリックエンドポイント) を暗号化する:選択したエンドポイントで SSL が有効になります。クライアントは、暗号化された接続を確立するために CA 証明書を提示する必要があります。
説明トランスポート層セキュリティ (TLS) は SSL の後継プロトコルです。本トピックでは、SSL は TLS と SSL の両方を指します。ApsaraDB RDS for SQL Server は TLS 1.0、TLS 1.1、TLS 1.2 をサポートしています。
SSLの仕組み
暗号化された接続が確立される際のプロセスは以下の通りです。
-
RDS インスタンスはサーバー証明書 (公開鍵を含む) をクライアントに送信します。
-
クライアントはその公開鍵を使用して共通鍵を暗号化します。
-
RDS インスタンスは秘密鍵を使用して共通鍵を復号します。
-
両者は共通鍵を使用して、以降のすべてのデータを暗号化および復号します。
オプションとして、クライアントは CA 証明書を使用してサーバー証明書を検証できます。これにより、RDS インスタンスの正当性を確認し、中間者攻撃を防ぎます。
前提条件
以下の前提条件は、カスタム証明書を使用する場合にのみ適用されます。開始する前に、次の点を確認してください。
-
Object Storage Service (OSS) が有効化されていること。詳細については、「OSSのアクティブ化」をご参照ください。
-
ApsaraDB RDS サービスアカウントが、Alibaba Cloud アカウント経由で OSS バケットにアクセスする権限を持っていること。
-
カスタム証明書が PFX 形式であり、OSS バケットにアップロードされていること。手順については、「OSSコンソールの概要」をご参照ください。大きなファイルをアップロードする場合は、「マルチパートアップロード」をご参照ください。ブラウザベースのアップロードについては、「一般的な操作」をご参照ください。
制限事項
-
SSL は、サーバーレスの ApsaraDB RDS for SQL Server インスタンスではサポートされていません。詳細については、「サーバーレス ApsaraDB RDS for SQL Server インスタンス」をご参照ください。
-
SSL は、読み書き分離エンドポイントへの接続ではサポートされていません。詳細については、「読み取り専用ルーティングエンドポイントを有効にして読み書き分離を有効にする」をご参照ください。
-
SSL が有効な場合、メジャーエンジンバージョンのアップグレード、マイナーエンジンバージョンの更新、新しいメジャーエンジンバージョンを実行する一時インスタンスの作成、およびゾーン間でのインスタンスの移行は実行できません。詳細については、「マイナーエンジンバージョンの更新」および「必要な SQL Server バージョンを実行する一時インスタンスの作成」をご参照ください。
使用上の注意
-
証明書の有効期間:SSL 証明書の有効期間は 1 年です。有効期限が切れる前に更新してください。有効期限が切れた証明書は、アプリケーションやクライアントによる暗号化接続の確立を妨げます。詳細については、「証明書の有効期間の更新」をご参照ください。
-
インスタンスの再起動:SSL の有効化、無効化、または証明書の更新を行うと、インスタンスが再起動されます。インスタンスは数分間利用できなくなります。これらの操作はオフピーク時に実行してください。
-
CPU オーバーヘッド:SSL 暗号化は CPU オーバーヘッドを大幅に増加させる可能性があります。パブリックエンドポイント経由での接続など、暗号化が必須な場合にのみ SSL を有効にしてください。
ステップ 1:SSLの有効化
-
ApsaraDB RDS コンソールにログインし、「インスタンス」ページに移動します。リージョンを選択し、対象のインスタンスを見つけて、そのインスタンス ID をクリックします。
-
左側のナビゲーションペインで、[データセキュリティ] をクリックします。
-
[SSL] タブで、[SSL暗号化] スイッチをオンにします。
-
[SSLの設定] ダイアログボックスで、暗号化方法を選択し、パラメーターを設定します。
次のいずれかの方法を選択します。
Alibaba Cloudが自動生成したキーの使用

|
パラメーター |
必須 |
説明 |
|
[保護対象エンドポイントの選択] |
はい |
暗号化するエンドポイント (内部またはパブリック) を選択します。一度に暗号化できるエンドポイントは 1 種類のみです。 説明
パブリックエンドポイントを暗号化するには、まず申請が必要です。詳細については、「パブリックエンドポイントの申請または解放」をご参照ください。 |
|
[強制暗号化] |
いいえ |
有効にすると、強制暗号化はインスタンス全体に適用されます。保護対象のエンドポイントかどうかにかかわらず、内部エンドポイントとパブリックエンドポイントの両方へのすべての接続で暗号化が必須になります。インスタンスは暗号化されていない接続を受け付けなくなり、CA 証明書のアップロードは不要になります。 説明
Virtual Private Cloud (VPC) 内のインスタンスでのみ利用可能です。ネットワークタイプを変更するには、「ネットワークタイプの変更」をご参照ください。 |
|
[サポートされる最も古い TLS バージョン] |
いいえ |
サーバーが受け入れる最小の TLS バージョン。有効な値:1.0、1.1、1.2。例えば、これを 1.1 に設定すると、サーバーは TLS 1.1 と TLS 1.2 のみを受け入れます。 |
カスタム証明書の使用
続行する前に、「前提条件」を完了してください。
-
[PFX 形式の証明書を OSS にアップロード] ステップで、[次のステップ] をクリックします。
-
[カスタムキー暗号化の使用] ステップで、次のパラメーターを設定し、[次のステップ] をクリックします。
パラメーター
説明
[OSS バケット]
証明書が格納されている OSS バケットを選択します。
[証明書]
PFX 証明書を選択します。
[パスワード]
証明書のパスワードを入力します。

-
[一般オプションの設定] ステップで、次のパラメーターを設定します。
パラメーター
必須
説明
[保護対象エンドポイントの選択]
はい
暗号化するエンドポイント (内部またはパブリック) を選択します。一度に暗号化できるエンドポイントは 1 種類のみです。
説明パブリックエンドポイントを暗号化するには、まず申請が必要です。詳細については、「パブリックエンドポイントの申請または解放」をご参照ください。
[強制暗号化]
いいえ
オンにすると、RDS インスタンスは暗号化されていない接続を拒否します。内部エンドポイントにのみ適用され、CA 証明書のアップロードは不要です。
説明VPC 内のインスタンスでのみ利用可能です。ネットワークタイプを変更するには、「ネットワークタイプの変更」をご参照ください。内部エンドポイントとパブリックエンドポイントの両方が存在する場合、強制暗号化をオンにする前にパブリックエンドポイントを解放する必要があります。詳細については、「パブリックエンドポイントの申請または解放」をご参照ください。
[サポートされる最も古い TLS バージョン]
いいえ
サーバーが受け入れる最小の TLS バージョン。有効な値:1.0、1.1、1.2。

-
[OK] をクリックします。
SSL の有効化には約 1 分かかります。ページを更新してインスタンスのステータスを確認してください。
ステップ 2:CA証明書のダウンロード
CA 証明書なしで SSL 経由で RDS インスタンスに接続できますが、ダウンロードして使用することを推奨します。CA 証明書を使用すると、クライアントは SSL ハンドシェイク中にサーバー証明書を検証でき、インスタンスの正当性を確認して中間者攻撃を防ぐことができます。
-
ApsaraDB RDS コンソールにログインし、「インスタンス」ページに移動します。リージョンを選択し、対象のインスタンスを見つけて、そのインスタンス ID をクリックします。
-
左側のナビゲーションペインで、[データセキュリティ] をクリックします。
-
[SSL] タブで、[CA 証明書のダウンロード] をクリックします。
ダウンロードしたパッケージには、3 つの証明書ファイルが含まれています。
|
ファイル |
用途 |
|
P7B |
Windows クライアント |
|
PEM |
Windows 以外のクライアントおよびアプリケーション |
|
JKS |
Java ベースのアプリケーション (truststore 形式)。デフォルトパスワード: |
JDK 7 または JDK 8 で JKS ファイルを使用する場合、アプリケーションを実行しているホスト上の jre/lib/security/Java.security にある以下のエントリを更新してください。この変更を行わないと、接続は失敗します。JDK 7 または JDK 8 でのほとんどの同様のエラーは、同じ設定ミスが原因で発生します。
jdk.tls.disabledAlgorithms=SSLv3, RC4, DH keySize < 224
jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints
ステップ 3:クライアントでのSSLの設定
SSL を有効にした後、アプリケーションまたはクライアントで証明書を設定します。以下の手順では、SQL Server Management Studio (SSMS) を例として使用します。
Windowsへの証明書のインポート
-
「スタート」メニューを開き、
certmgr.mscを検索して開きます。 -
[certmgr] ダイアログボックスで、[信頼されたルート証明機関]を右クリックします。
-
[すべてのタスク] > [インポート] を選択します。
-
[次へ] をクリックします。
-
[証明書のインポート ウィザード] で、[参照] をクリックし、「ステップ 2」でダウンロードした SSL 証明書を選択して、[次へ] をクリックします。
-
証明書を保存するストアを選択し、[次へ] をクリックします。
-
[完了] をクリックし、インポートが完了するのを待ちます。
SSMSの設定
-
SSMS を開き、右下隅の [オプション] をクリックします。

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

-
次のクエリを実行して、接続が暗号化されていることを確認します。結果が
TRUEの場合、暗号化が有効であることを示します。SELECT ENCRYPT_OPTION FROM SYS.DM_EXEC_CONNECTIONS WHERE SESSION_ID = @@SPID
付録:SSL接続のサンプルコード
Python
# -*- coding:utf-8 -*-
import ssl
import pyodbc
# ダウンロードした PEM 証明書を使用して SSL コンテキストを作成します
context = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH, cafile="D:\ca\ApsaraDB-CA-Chain.pem")
# RDS インスタンスに接続します
# プレースホルダーを実際の値に置き換えてください:
# SERVER - RDS インスタンスの接続文字列
# DATABASE - データベース名
# UID - ユーザー名
# PWD - パスワード
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)
conn.close()
C#
using System;
using System.Data.SqlClient;
namespace SqlConnectionSSLExample
{
class Program
{
static void Main(string[] args)
{
// SSL 暗号化を有効にして RDS インスタンスに接続します
// プレースホルダーを実際の値に置き換えてください:
// Data Source - RDS インスタンスの接続文字列
// Initial Catalog - データベース名
// User ID - ユーザー名
// Password - パスワード
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))
{
connection.Open();
try
{
SqlCommand cmd = new SqlCommand("SELECT @@version", connection);
string result = cmd.ExecuteScalar().ToString();
Console.WriteLine(result);
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
}
}
}
次のステップ
証明書の有効期間の更新
SSL 証明書の有効期間は 1 年です。有効期限が切れる前に更新してください。有効期限が切れた証明書は、アプリケーションやクライアントによる暗号化接続の確立を妨げます。
カスタム証明書を利用した SSL の有効期限が近づくと、Alibaba Cloud は対象ユーザーにメールと内部メッセージで通知します。内部メッセージはイベントセンターページで確認できます。
証明書の有効期間を更新すると、RDS インスタンスが再起動します。この操作はオフピーク時に実行してください。
-
ApsaraDB RDS コンソールにログインし、「インスタンス」ページに移動します。リージョンを選択し、対象のインスタンスを見つけて、そのインスタンス ID をクリックします。
-
左側のナビゲーションペインで、[データセキュリティ] をクリックします。
-
[SSL] タブで、[有効期間の更新] をクリックします。

SSLの無効化
-
SSL を無効にすると、インスタンスが再起動します。影響を最小限に抑えるためにプライマリ/セカンダリ スイッチオーバーが発生しますが、この操作はオフピーク時に実行してください。
-
SSL を無効にすると、アプリケーションは暗号化されていない接続でのみ接続できます。
-
SSL を無効にすると、アクセスパフォーマンスは向上しますが、セキュリティは低下します。安全な環境でのみ SSL を無効にしてください。
-
「インスタンス」ページに移動します。リージョンを選択し、対象のインスタンスを見つけて、そのインスタンス ID をクリックします。
-
左側のナビゲーションペインで、[データセキュリティ] をクリックします。
-
[SSL] タブをクリックします。
-
[SSL 暗号化] をオフにします。確認メッセージで [OK] をクリックします。
接続の暗号化ステータスの確認
SQL Server で次のクエリを実行して、アクティブな各接続で SSL が有効になっているかどうかを確認します。
SELECT session_id, encrypt_option
FROM sys.dm_exec_connections;
GO
encrypt_option がセッション ID に対して true を返す場合、その接続で SSL が有効になります。
関連 API
よくある質問
有効期限が切れた SSL 証明書を更新しないとどうなりますか? RDS インスタンスに障害が発生したり、セキュリティが低下したりしますか?
RDS インスタンスは正常に動作し続けますが、証明書の有効期限が切れると、クライアントは暗号化された接続を確立できなくなります。これにより接続が失敗したり、セキュリティ上の問題が発生したりする可能性があります。