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

ApsaraDB RDS:SSL 経由での ApsaraDB RDS for PostgreSQL インスタンスへの接続

最終更新日:Aug 22, 2026

pgAdmin、psql、または JDBC を使用して、暗号化された SSL 接続経由で ApsaraDB RDS for PostgreSQL インスタンスに接続します。

前提条件

開始する前に、以下が準備されていることを確認してください:

接続メソッドの選択

ツール 最適な用途
pgAdmin GUI ベースのデータベース管理とインタラクティブなクエリ
psql スクリプト、自動化、およびコマンドラインワークフロー
JDBC データベースにプログラムで接続する Java アプリケーション

SSL モードのリファレンス

3つの接続メソッドはすべて同じ SSL モード値を使用します。セキュリティ要件に基づいて選択してください:

SSL モード 動作 使用するケース
require 接続を暗号化しますが、サーバー証明書の検証は行いません 証明書検証なしの基本的な暗号化
verify-ca 接続を暗号化し、サーバー CA 証明書を検証します ほとんどの本番環境での使用に推奨されます
verify-full 接続を暗号化し、サーバー CA 証明書を検証し、サーバー証明書の CN または DNS が接続エンドポイントと一致することを確認します 最高のセキュリティ。中間者攻撃から保護します
disable SSL 暗号化なし。インスタンスにアクセス制御リスト (ACL) が設定されていない場合にのみ利用可能です 信頼できるネットワークでの開発またはテストのみ
RDS インスタンスに ACL が設定されている場合、インスタンスは SSL 接続のみを受け入れます。SSL モードを requireverify-ca、または verify-full に設定してください。

pgAdmin を使用した接続

pgAdmin 4 は、PostgreSQL 公式ウェブサイトから PostgreSQL をインストールする際に含まれています。PostgreSQL をインストールせずに pgAdmin を使用するには、pgAdmin から別途ダウンロードしてください。

以下の手順では、pgAdmin 4 V6.2.0 を例として使用します。

  1. pgAdmin 4 を起動します。

    初回ログイン時、pgAdmin は保存されたパスワードと認証情報を保護するためのマスターパスワードの設定を求めます。
  2. Servers を右クリックし、Register > Server を選択します。

  3. General タブで、サーバーの名前を入力します。

  4. Connection タブで、接続詳細を入力します。

    パラメーター 説明
    ホスト名/アドレス RDS インスタンスのエンドポイントです。 VPC 接続には内部エンドポイントを、インターネット接続にはパブリックエンドポイントを使用します。 この情報は [データベース接続] ページで確認できます。 詳細については、「ApsaraDB RDS for PostgreSQL インスタンスのエンドポイントとポート番号の表示と変更」をご参照ください。
    ポート 接続に使用するポート番号です。 この情報は [データベース接続] ページで確認できます。
    ユーザー名 データベースアカウントのユーザー名です。 詳細については、「データベースとアカウントの作成」をご参照ください。
    パスワード データベースアカウントのパスワードです。

    连接信息

  5. Parameters タブで、SSL 設定を構成します。

    カスタム証明書 (server-ca.crt) またはクラウド証明書 (ApsaraDB-CA-Chain.pem) をルート証明書として使用できます。ご利用のシステム上の実際のファイルパスを使用してください。
    パラメーター 説明
    SSL mode SSL モード。利用可能な値とそれぞれの使用ケースについては、「SSL モードのリファレンス」をご参照ください。
    Client certificate client.crt へのパス。クライアント CA 証明書を設定した場合にのみ必須です。
    Client certificate key client.key へのパス。クライアント CA 証明書を設定した場合にのみ必須です。
    Root certificate サーバー CA 証明書ファイルへのパス。SSL modeVerify-CA または Verify-Full に設定されている場合に必須です。
  6. Save をクリックします。接続が成功すると、pgAdmin パネルにデータベースツリーが展開されます。

    重要

    postgres データベースはデフォルトのシステムデータベースです。このデータベースに対して操作を実行しないでください。

ステップ 4: RDS インスタンスに接続する

ご利用のマシンに PostgreSQL クライアントがインストールされている必要があります。詳細については、「PostgreSQL ドキュメント」をご参照ください。
  1. /var/lib/pgsql ディレクトリに、.postgresql という名前のフォルダを作成します。

    mkdir /var/lib/pgsql/.postgresql
  2. 証明書ファイルを .postgresql フォルダにコピーします。

    • client.crtclient.key は、クライアント CA 証明書を設定した場合にのみ必須です。
    • カスタム証明書 (server-ca.crt) またはクラウド証明書 (ApsaraDB-CA-Chain.pem) のいずれかを使用できます。コマンドを実行する際は、実際のファイルパスを使用してください。
    cp client.crt client.key server-ca.crt /var/lib/pgsql/.postgresql/
  3. .postgresql フォルダのファイル所有者と権限を設定します。

    chown postgres:postgres /var/lib/pgsql/.postgresql/*
    chmod 600 /var/lib/pgsql/.postgresql/*
  4. 環境変数ファイルを編集用に開きます。

    vim /var/lib/pgsql/.bash_profile
  5. i を押して編集モードに入り、以下の環境変数を追加します:

    export PGSSLCERT="/var/lib/pgsql/.postgresql/client.crt"
    export PGSSLKEY="/var/lib/pgsql/.postgresql/client.key"
    export PGSSLROOTCERT="/var/lib/pgsql/.postgresql/ca1.crt"
  6. Esc を押して編集モードを終了し、:wq と入力して保存し終了します。

  7. 環境変数を再読み込みします。

    source .bash_profile
  8. SSL モードを設定します。

    export PGSSLMODE="verify-full"
  9. RDS インスタンスに接続します。

    プレースホルダー 説明 確認場所
    <Endpoint> RDS インスタンスの SSL 保護されたエンドポイント SSL 暗号化 タブにある 保護されたホスト
    <Username> データベースアカウントのユーザー名 アカウント ページ
    <Port number> ポート番号 (デフォルト: 5432) データベース接続 ページ
    <Database name> 接続するデータベースの名前 データベース接続 ページ
    psql -h <Endpoint> -U <Username> -p <Port number> -d <Database name>

    プレースホルダーを実際の値に置き換えてください:

重要

postgres データベースはデフォルトのシステムデータベースです。このデータベースに対して操作を実行しないでください。

JDBC を使用した接続

ステップ 1:証明書ファイルの取得

Java アプリケーションが実行されるホストに、以下のファイルをダウンロードします:

  • server-ca.crt:サーバー CA 証明書。取得方法については、前提条件のセクションをご参照ください。

  • client.crtclient.key:クライアント CA 証明書を設定した場合にのみ必須です。

ステップ 2:クライアント秘密鍵を PKCS8 (PK8) フォーマットに変換

JDBC はクライアント秘密鍵を PKCS8 (PK8) フォーマットで要求します。アプリケーションが実行されるホストで以下のコマンドを実行してください:

openssl pkcs8 -topk8 -inform PEM -in client.key -outform der -out client.pk8 -v1 PBE-MD5-DES
# プロンプトが表示されたら暗号化パスワードを入力します。このパスワードはコード内で使用します。
Enter Encryption Password:
Verifying - Enter Encryption Password:
警告

このコマンドは、アプリケーションが実行される同じホストで実行してください。別のホストで実行してファイルをコピーすると、以下のエラーが発生する可能性があります:

  • org.postgresql.util.PSQLException: Could not decrypt SSL key file C:/Users/XXX/XXX/client.pk8

  • org.postgresql.util.PSQLException: SSL error: Received fatal alert: unexpected_message

ステップ 3:PostgreSQL JDBC ドライバーの依存関係を追加

以下の依存関係を pom.xml に追加します:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.10</version>
</dependency>

ステップ 4:RDS インスタンスへの接続

以下の例では、カスタム証明書 (server-ca.crt) を使用します。クラウド証明書を使用するには、server-ca.crtApsaraDB-CA-Chain.pem に置き換えてください。
public class PgSslDemo {
    public static void main(String[] args) {
        // RDS インスタンスのエンドポイント
        String hostname = "pgm-bp1gclw58u36s6****.pg.rds.aliyuncs.com";
        // ポート番号 (デフォルト: 5432)
        String port = "5432";
        // データベース名
        String dbname = "postgres";

        String jdbcUrl = "jdbc:postgresql://" + hostname + ":" + port + "/" + dbname + "?binaryTransfer=true";

        Properties properties = new Properties();
        // データベースアカウントのユーザー名
        properties.setProperty("user", "test_user");
        // データベースアカウントのパスワード
        properties.setProperty("password", "test_pwd");
        // 証明書ファイルが保存されているディレクトリ
        String path = "D:\\ssl\\";

        // SSL を有効にする
        properties.setProperty("ssl", "true");
        // サーバー CA 証明書へのパス
        properties.setProperty("sslrootcert", path + "/" + "server-ca.crt");
        // クライアント秘密鍵へのパス (PKCS8 フォーマット)
        properties.setProperty("sslkey", path + "/" + "client.pk8");
        // クライアント証明書へのパス
        properties.setProperty("sslcert", path + "/" + "client.crt");
        // client.key を PKCS8 フォーマットに変換する際に設定した暗号化パスワード
        properties.setProperty("sslpassword", "test_ssl_pwd");

        // SSL モード: require、verify-ca、または verify-full
        properties.setProperty("sslmode", "verify-ca");

        try {
            Class.forName("org.postgresql.Driver");
            Connection connection = DriverManager.getConnection(jdbcUrl, properties);
            // 例: students01 テーブルからすべての行をクエリする
            PreparedStatement preparedStatement = connection.prepareStatement("select * from students01");
            ResultSet resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                ResultSetMetaData rsmd = resultSet.getMetaData();
                int columnCount = rsmd.getColumnCount();
                Map map = new HashMap();
                for (int i = 0; i < columnCount; i++) {
                    map.put(rsmd.getColumnName(i + 1).toLowerCase(), resultSet.getObject(i + 1));
                }
                System.out.println(map);
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}

次のステップ