全部產品
Search
文件中心

Hologres:傳輸加密

更新時間:Jul 09, 2024

為了提高客戶應用端和Hologres的傳輸鏈路安全性,您可以啟用SSL(Secure Sockets Layer)傳輸加密。SSL通過使用數位憑證和密碼編譯演算法(如TLS)在Hologres執行個體和用戶端之間建立加密串連,以保護資料轉送過程中的機密性和完整性。

適用情境

SSL傳輸加密適用於以下情境:

  • 資料庫遠端存取:當用戶端需要從遠程位置訪問資料庫時,SSL傳輸加密可以提升資料轉送過程中的安全性。

  • 符合安全合規要求:許多行業標準和法規要求在資料轉送過程中使用加密技術,使用SSL傳輸加密可以協助組織符合這些安全合規要求。

SSL傳輸在傳輸層對網路連接進行加密,能提升通訊資料的安全性和完整性,但會同時增加網路連接回應時間。

前提條件

注意事項

  • Hologres V1.1及以上版本支援開啟傳輸加密功能;V1.2及以上版本支援TLS;V2.1版本及以上版本,支援開啟傳輸加密功能、支援使用CA認證的傳輸加密,並支援管理主控台自助開啟。

    說明

    如果您的執行個體是V1.1以下版本,請您使用自助升級或加入HologresDingTalk交流群反饋,詳情請參見如何擷取更多的線上支援?

  • 開啟或關閉SSL傳輸加密均需要重啟執行個體,請謹慎操作。SSL傳輸加密預設情況為關閉狀態。

    • Hologres開啟SSL傳輸加密後,表示允許用戶端通過SSL串連Hologres,在用戶端串連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. 在左側導覽列單擊執行個體列表,然後單擊目標執行個體ID。

  3. 在執行個體詳情頁面單擊資料安全

  4. SSL頁簽,開啟SSL 加密功能開關。

  5. 開通SSL鏈路加密對話方塊,單擊開通SSL

步驟2:下載CA認證

Hologres提供執行個體CA認證供您下載,當您通過用戶端遠端連線Hologres執行個體時,使用執行個體CA認證可以對執行個體真偽進行校正。

  1. 登入Hologres管理主控台,在左上方選擇地區。

  2. 在左側導覽列單擊執行個體列表,然後單擊目標執行個體ID。

  3. 在執行個體詳情頁面單擊資料安全

  4. SSL頁簽,單擊下載認證

步驟3:串連Hologres

支援通過PSQL用戶端和JDBC兩種方式串連Hologres,在串連的過程中通過配置參數選擇是否開啟SSL串連傳輸加密。

使用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

    當前阿里雲帳號的AccessKey ID。

    您可以單擊AccessKey 管理,擷取AccessKey ID。

    建議您使用環境變數的方式調用使用者名稱和密碼,降低密碼泄露風險。

    AccessKey Secret

    當前阿里雲帳號的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-caverify-full,需要配置此參數。

    Port

    Hologres執行個體的公用網路連接埠。

    樣本取值80

    Endpoint

    Hologres執行個體的公用網路地址。

    樣本取值xxx-cn-hangzhou.hologres.aliyuncs.com

    Database

    Hologres的資料庫名稱。

    開通Hologres執行個體後,系統自動建立postgres資料庫。

    您可以使用postgres資料庫連結Hologres,但是該資料庫分配到的資源較少,開發實際業務建議您建立資料庫。詳情請參見建立資料庫

    樣本取值mydb

  • 串連驗證。

    如果將PGSSLMODE設定為require,串連Hologres時出現如下提示,則表示已經使用SSL傳輸加密串連。傳輸加密

使用JDBC串連Hologres

您使用JDBC串連Hologres時,可以通過串連配置參數sslsslmode控制是否使用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();
  }