Azure HorizonDB でのアプリケーション クライアント証明書の更新 (プレビュー)

アプリケーションを HorizonDB Azure接続する場合、アプリケーション クライアントは信頼されたルート証明書をインストールする必要があります。 次のセクションでは、アプリケーションの信頼されたルート証明書を更新する方法について説明します。これは、Azure HorizonDB インスタンスに接続するアプリケーションの一般的なシナリオです。

証明書のピン留めシナリオ用に、クライアントの Java キー ストアにルート証明機関証明書をインポートする

カスタム記述 Java アプリケーションは、信頼された証明機関 (CA) 証明書を含む cacerts と呼ばれる既定のキーストアを使用します。 Java トラスト ストアとも呼ばれます。 cacertsという名前の証明書ファイルは、java.home\lib\security というセキュリティ プロパティ ディレクトリに存在します。java.home はランタイム環境ディレクトリ (SDK 内の jre ディレクトリ、または Java™ 2 ランタイム環境の最上位ディレクトリ) です。 PostgreSQL を使用したクライアント証明書のピン留めシナリオのクライアント ルート CA 証明書を更新するには、次の手順に従います。

  1. cacerts Javaキーストアに必要な証明書が既に含まれているかどうかを確認します。 次のコマンドを使用して、Javaキーストア内の証明書を一覧表示できます。

      keytool -list -v -keystore ..\lib\security\cacerts > outputfile.txt
    

    必要な証明書がクライアントの Java キー ストアに存在しない場合は、出力を確認できるので、次の手順に進みます。

  2. カスタム キーストアのバックアップ コピーを作成します。

  3. 証明書をダウンロードし、参照できる場所にローカルに保存します。

  4. 必要なすべてのルート CA 証明書を含む結合 CA 証明書ストアを生成します。 次の例は、PostgreSQL JDBC ユーザーの DefaultJavaSSLFactory の使用を示しています。

        keytool -importcert -alias PostgreSQLServerCACert  -file D:\ DigiCertGlobalRootG2.crt.pem   -keystore truststore -storepass password -noprompt
    
        keytool -importcert -alias PostgreSQLServerCACert2  -file "D:\ Microsoft ECC Root Certificate Authority 2017.crt.pem" -keystore truststore -storepass password  -noprompt
    
        keytool -importcert -alias PostgreSQLServerCACert  -file D:\ DigiCertGlobalRootCA.crt.pem   -keystore truststore -storepass password -noprompt
    
  5. 元のキーストア ファイルを、新しく生成されたキーストア ファイルに置き換えます。

    System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
    System.setProperty("javax.net.ssl.trustStorePassword","password");
    
  6. 元のルート CA pem ファイルを結合されたルート CA ファイルに置き換え、アプリケーション/クライアントを再起動します。

    PostgreSQL JDBC ドライバーを使用したクライアント証明書の構成の詳細については、この ドキュメントを参照してください

    Note

    証明書をクライアント証明書ストアにインポートするには、証明書の .crt ファイルを .pem 形式に変換する必要がある場合があります。 Azure HorizonDB (プレビュー) では、Transport Layer Security (TLS) を使用できます。

Java キー ストアの信頼できる証明書の一覧をプログラムで取得する

既定では、信頼された証明書は、クライアントの Java インストール フォルダー内にある cacerts という名前の特別なファイルに格納されます。 次の例では、最初に cacerts を読み取り、 KeyStore オブジェクトに読み込みます。

private KeyStore loadKeyStore() {
    String relativeCacertsPath = "/lib/security/cacerts".replace("/", File.separator);
    String filename = System.getProperty("java.home") + relativeCacertsPath;
    FileInputStream is = new FileInputStream(filename);
    KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
    String password = "changeit";
    keystore.load(is, password.toCharArray());

    return keystore;
}

cacertsの既定のパスワードはchangeitですが、実際のクライアントでは異なる必要があります。管理者は Java のインストール直後にパスワードを変更することをお勧めします。 KeyStore オブジェクトを読み込んだら、PKIXParameters クラスを使用して存在する証明書を読み取ることができます。

public void whenLoadingCacertsKeyStore_thenCertificatesArePresent() {
    KeyStore keyStore = loadKeyStore();
    PKIXParameters params = new PKIXParameters(keyStore);
    Set<TrustAnchor> trustAnchors = params.getTrustAnchors();
    List<Certificate> certificates = trustAnchors.stream()
      .map(TrustAnchor::getTrustedCert)
      .collect(Collectors.toList());

    assertFalse(certificates.isEmpty());
}

証明書のピン留めシナリオで、Azure アプリ サービスでクライアントを使用する場合にルート証明機関証明書を更新する

Azure アプリ サービスの場合、Azure HorizonDB インスタンスに接続する場合、クライアント証明書の更新に関して 2 つのシナリオが考えられます。これは、Azure アプリ Services にデプロイされたアプリケーションで SSL を使用する方法によって異なります。

  • Azure HorizonDB インスタンスで変更が行われる前に、新しい証明書がプラットフォーム レベルで App Service に追加されます。 アプリケーションの App Service プラットフォームに含まれている SSL 証明書を使用している場合、何もする必要はありません。 詳細については、 Azure App Service ドキュメントの「Azure App Service での TLS/SSL 証明書の追加と管理」を参照してください。
  • SSL 証明書ファイルへのパスをコードに明示的に含める場合は、新しい証明書をダウンロードし、それを使用するようにコードを更新する必要があります。 このシナリオの良い例は、「チュートリアル: Azure App Service のカスタム コンテナー用にサイドカー コンテナーを構成する」の説明に従って、 Azure App Service のドキュメントで App Service でカスタム コンテナーを使用する場合です。

証明書のピン留めシナリオで、Azure Kubernetes Service (AKS)でクライアントを使用するときにルート証明機関証明書を更新する

Azure Kubernetes Services (AKS) でホストされているアプリケーションを使用して Azure HorizonDB に接続し、証明書をピン留めしようとしている場合は、専用の顧客のホスト環境からのアクセスに似ています。 この手順を参照してください。

証明書ピン留めのシナリオ向けに、Windows 上の .NET(Npgsql)ユーザーのルート CA 証明書を更新する

Azure HorizonDB に接続Windows.NET (Npgsql) ユーザーの場合は、3 つの Microsoft RSA ルート証明機関 2017、DigiCert Global Root G2、DigiCert Global Root CA がすべて、Windows証明書ストア、信頼されたルート証明機関に存在することを確認します。 証明書が存在しない場合は、不足している証明書をインポートします。

証明書のピン留めシナリオ用に、他のクライアントのルート証明機関証明書を更新する

他の PostgreSQL クライアント ユーザーの場合は、次の形式を使用して 2 つの CA 証明書ファイルをマージできます。

-----BEGIN CERTIFICATE-----
(Root CA1: DigiCertGlobalRootCA.crt.pem)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Root CA2: Microsoft ECC Root Certificate Authority 2017.crt.pem)
-----END CERTIFICATE-----
  • Azure HorizonDB (プレビュー)