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

Hologres:転送中暗号化

最終更新日:Feb 04, 2026

クライアントアプリケーションと Hologres 間のデータリンクのセキュリティを強化するために、Secure Sockets Layer (SSL) 転送中暗号化を有効にできます。SSL は、デジタル証明書および Transport Layer Security (TLS) などの暗号化アルゴリズムを使用して、Hologres インスタンスとクライアント間に暗号化された接続を確立します。これにより、データ転送中の機密性と整合性が保護されます。

利用シーン

SSL 転送中暗号化は、以下のシナリオに適しています。

  • リモートからのデータベースアクセス:クライアントがリモートからデータベースにアクセスする必要がある場合、SSL 転送中暗号化によりデータ転送中のセキュリティを向上できます。

  • セキュリティおよびコンプライアンス要件の遵守:多くの業界標準および規制では、転送中のデータに対して暗号化の使用が求められています。SSL 転送中暗号化を使用することで、組織がこれらのセキュリティおよびコンプライアンス要件を満たすことができます。

SSL はネットワーク接続に対してトランスポート層の暗号化を提供します。これにより通信データのセキュリティと整合性が強化されますが、ネットワーク接続の応答時間が増加します。

前提条件

  • Hologres インスタンスが作成済みであること。詳細については、「Hologres インスタンスの購入」をご参照ください。

  • PSQL クライアントまたは Java Database Connectivity (JDBC) がダウンロードおよびインストール済みであること。詳細については、「PSQL クライアント」または「JDBC」をご参照ください。

注意事項

  • Hologres V1.1 以降は転送中暗号化をサポートしています。V1.2 以降は TLS をサポートしています。V2.1 以降は転送中暗号化、CA 証明書を使用した転送中暗号化、および管理コンソールでのセルフサービスによる有効化をサポートしています。

    説明

    ご利用のインスタンスが V1.1 より前のバージョンの場合、一般的なスペックアップ準備失敗エラー」をご参照いただくか、Hologres DingTalk グループに参加してフィードバックを送信してください。詳細については、「オンラインサポートをさらに利用する方法」をご参照ください。

  • SSL 転送中暗号化の有効化または無効化には、インスタンスの再起動が必要です。慎重に操作してください。SSL 転送中暗号化はデフォルトで無効になっています。

    • Hologres の SSL 転送中暗号化を有効にすると、クライアントは SSL を使用して Hologres に接続できるようになります。クライアントが Hologres に接続する際、暗号化接続を使用するかどうかを選択できますが、その選択を明示的に指定する必要があります。

    • Hologres の SSL 転送中暗号化を無効にすると、非 SSL 接続のみがサポートされます。

  • Hologres は、SSL 転送中暗号化について以下のモードをサポートしています。

    SSL モード

    最小サポートバージョン

    Require:データリンクのみを暗号化します。

    V1.1

    Verify-CA:データリンクを暗号化し、CA 証明書を使用して Hologres サーバーを認証します。

    V2.1

    Verify-Full:データリンクを暗号化し、CA 証明書を使用して Hologres サーバーを認証し、証明書内の CN または DNS と接続に設定された Hologres エンドポイントを比較します。

    V2.1

  • SSL 証明書の有効期間は 1 年です。有効期限が切れる前に手動で証明書を更新する必要があります。更新を行わないと、証明書の有効期限切れ後に SSL 暗号化を使用してインスタンスに接続できなくなります。

  • SSL 転送中暗号化を有効にすると、CPU 使用率および読み取り/書き込みレイテンシが増加します。

  • SSL 転送中暗号化を有効にした後、既存の接続を切断して再接続する必要があります。そうしないと、暗号化が適用されません。

  • SSL 転送中暗号化の有効化または無効化、および SSL 証明書の更新を行うと、Hologres インスタンスが再起動されます。このプロセスには約 3 分かかります。これらの操作は、トラフィックの少ない時間帯に行ってください。

ステップ 1:Hologres インスタンスの転送中暗号化を有効にする

  1. Hologres 管理コンソールにログインし、左上隅でリージョンを選択します。

  2. 左側のナビゲーションウィンドウで、Instances をクリックし、対象のインスタンスの ID をクリックします。

  3. インスタンスの製品ページで、データセキュリティをクリックします。

  4. SSLタブで、SSL 暗号化機能スイッチをオンにします。

  5. SSL 暗号化の有効化ダイアログボックスで、SSL の有効化をクリックします。

ステップ 2:CA 証明書をダウンロードする

Hologres では、インスタンス CA 証明書をダウンロードできます。クライアントからリモートで Hologres インスタンスに接続する際に、このインスタンス CA 証明書を使用してインスタンスの真正性を検証できます。

  1. Hologres 管理コンソールにログインし、左上隅でリージョンを選択します。

  2. 左側のInstancesをクリックし、対象インスタンスの ID をクリックします。

  3. インスタンスの製品ページで、データセキュリティをクリックします。

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

ステップ 3:Hologres に接続する

PSQL クライアントまたは JDBC を使用して Hologres に接続できます。接続プロシージャ中にパラメーターを設定して、転送中暗号化を有効にするかどうかを選択できます。

PSQL コマンドラインを使用して Hologres に接続する

  • 接続ステートメント。

    PG_USER=<AccessKey ID> 
    PG_PASSWORD=<AccessKey Secret> 
    PG_SSLMODE=<SSL Mode> 
    PG_SSLROOTCERT=<certificate folder> 
    PGSSLMODE=$PG_SSLMODE PGSSLROOTCERT=$PG_SSLROOTCERT PGUSER=$PG_USER PGPASSWORD=$PG_PASSWORD psql -p <Port> -h <Endpoint> -d <Database>
  • パラメーターの説明。

    パラメーター

    説明

    AccessKey ID

    Alibaba Cloud アカウントの AccessKey ID です。

    AccessKey 管理にアクセスして AccessKey ID を取得してください。

    資格情報漏洩のリスクを低減するため、ユーザー名とパスワードには環境変数を使用してください。

    AccessKey Secret

    Alibaba Cloud アカウントの AccessKey Secret です。

    AccessKey 管理にアクセスして AccessKey Secret を取得してください。

    資格情報漏洩のリスクを低減するため、ユーザー名とパスワードには環境変数を使用してください。

    SSL Mode

    PSQL を使用して Hologres に接続する際の転送中暗号化モードです。有効な値は以下のとおりです。

    • require:転送中暗号化を使用します。データリンクのみが暗号化されます。

    • verify-ca:データリンクを暗号化し、Hologres インスタンスを認証します。

    • verify-full:データリンクを暗号化し、Hologres インスタンスを認証し、証明書内の CN または DNS と接続に設定されたデータベースエンドポイントを比較します。

    • disable:転送中暗号化を使用しません。

    certificate folder

    CA 証明書の保存パスです。

    このパラメーターは、SSL Mode パラメーターが verify-ca または verify-full に設定されている場合に必須です。

    Port

    Hologres インスタンスのパブリックポートです。

    例:80

    Endpoint

    Hologres インスタンスのパブリックエンドポイントです。

    例:xxx-cn-hangzhou.hologres.aliyuncs.com

    Database

    Hologres データベースの名前です。

    Hologres インスタンスを作成すると、システムによって自動的に postgres データベースが作成されます。

    postgres データベースを使用して Hologres に接続できますが、このデータベースにはリソースがわずかしか割り当てられていません。ビジネス開発用に新しいデータベースを作成することを推奨します。詳細については、「データベースの作成」をご参照ください。

    例:mydb

  • 接続の検証。

    PGSSLMODErequire に設定すると、Hologres に接続した際に以下のプロンプトが表示されます。これは SSL 暗号化接続が使用されていることを示しています。传输加密

JDBC を使用して Hologres に接続する

JDBC を使用して Hologres に接続する際、ssl および sslmode 接続構成パラメーターを使用して、SSL 転送中暗号化を使用するかどうかを制御できます。Hologres での結果は、これらのパラメーターの値によって異なります。次の表に示します。

Hologres インスタンスで転送中暗号化は有効になっていますか?

ssl 構成

sslmode 構成

結果

はい

true

  • require

  • verify-ca

  • verify-full

サーバーに接続して操作を実行できます。データ転送中に転送中暗号化が使用されます。

はい

false

  • require

  • verify-ca

  • verify-full

サーバーに接続して操作を実行できます。データ転送中に転送中暗号化は使用されません。

いいえ

true

  • require

  • verify-ca

  • verify-full

エラーが報告されます。エラーメッセージは以下のとおりです。

image.png

いいえ

false

  • require

  • verify-ca

  • verify-full

サーバーに接続して操作を実行できます。データ転送中に転送中暗号化は使用されません。

以下のコードはその例です。

 // Hologres インスタンスのエンドポイントを設定します。
 String hostname = "hgxxxxxxx-cn-hangzhou-vpc.hologres.aliyuncs.com:80";
 // Hologres インスタンスのポートを設定します。
 String port = "80";
 // 接続するデータベースの名前を設定します。
 String dbname = "postgres";

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

 Properties properties = new Properties();
 // データベース接続のユーザー名を設定します。資格情報漏洩のリスクを低減するため、環境変数を使用してください。
 properties.setProperty("user", "accessid");
 // データベース接続のパスワードを設定します。資格情報漏洩のリスクを低減するため、環境変数を使用してください。
 properties.setProperty("password", "accesskey");

  // SSL 経由でのアクセスを構成します。
  properties.setProperty("ssl", "true");

  // 認証局の公開鍵の名前を設定します。
  properties.setProperty("sslrootcert", path + "/" + "hologres_certificate.crt");

  // SSL モードを構成します。有効な値は require、verify-ca、および verify-full です。
  properties.setProperty("sslmode", "verify-full");

  try {
      Class.forName("org.postgresql.Driver");
      Connection connection = DriverManager.getConnection(jdbcUrl, properties);
      // この例では、postgres データベース内に example という名前のテーブルが存在すると仮定します。以下のコードは example テーブルからデータを照会します。
      PreparedStatement preparedStatement = connection.prepareStatement("select * from " +
              "example");
      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();
  }