Azure Database for PostgreSQL フレキシブル サーバーでアプリケーション クライアントのクライアント TLS 証明書を更新する
適用対象: Azure Database for PostgreSQL - フレキシブル サーバー
証明書のピン留めシナリオ用にクライアント上の Java キー ストアにルート CA 証明書をインポートする
カスタム書き込み Java アプリケーションでは、信頼された証明機関 (CA) 証明書が含まれている cacerts という名前の既定のキーストアを使用します。 また、多くの場合、Java 信頼ストアとも呼ばれます。 cacerts という名前の証明書は、java.home\lib\security というセキュリティ プロパティ ディレクトリにあります。java.home は、ランタイム環境ディレクトリ (SDK の jre ディレクトリ、または Java™ 2 ランタイム環境の最上位レベルのディレクトリ) です。 PostgreSQL フレキシブル サーバーでクライアント証明書のピン留めシナリオ用にクライアント ルート CA 証明書を更新するには、次の手順に従います。
- cacerts Java キーストアをチェックして、必要な証明書が既に含まれているかどうかを確認します。 次のコマンドを使用して、Java キーストア内の証明書を一覧表示できます。
keytool -list -v -keystore ..\lib\security\cacerts > outputfile.txt
必要な証明書がクライアントの Java キー ストアに存在しない場合は、出力で確認できるように、次の手順に進む必要があります。
カスタム キーストアのバックアップ コピーを作成します。
証明書をダウンロード し、これらを参照できる場所であるローカルに保存します。
必要なルート 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
元のキーストア ファイルを、新しく生成されたものに置き換えます。
System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file"); System.setProperty("javax.net.ssl.trustStorePassword","password");
元のルート CA pem ファイルを、結合されたルート CA ファイルに置き換えて、アプリケーションやクライアントを再起動します。
PostgreSQL JDBC ドライバーを使用したクライアント証明書の構成の詳細については、こちらのドキュメントを参照してください。
Note
証明書をクライアント証明書ストアにインポートするために、証明書の .crt ファイルを .pem 形式に変換する必要が生じる場合があります。 これらのファイル変換を行うために OpenSSL ユーティリティを使用できます。
Java キー ストアでプログラムによって信頼された証明書のリストを取得する
前述のように、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 Database for PostgreSQL フレキシブル サーバーで Azure App Services のクライアントを使用する場合にルート CA 証明書を更新する
Azure Database for PostgreSQL に接続する Azure App Services では、クライアント証明書の更新には 2 つのシナリオが考えられます。これは、Azure App Services にデプロイされたアプリケーションで SSL をどのように使用するかによって異なります。
- 通常新しい証明書は、Azure Database for PostgreSQL フレキシブル サーバーでの変更に先立ち、プラットフォーム レベルで App Service に追加されます。 App Service プラットフォームに含まれる SSL 証明書をアプリケーションで使用している場合は、何もする必要はありません。 詳細については、次の Azure App Service のドキュメントを参照してください。
- SSL 証明書ファイルへのパスをコードに明示的に含めている場合は、新しい証明書をダウンロードし、新しい証明書を使用するようにコードを更新する必要があります。このシナリオの良い例は、App Service ドキュメントで共有されているように、App Service でカスタム コンテナーを使用する場合です。
証明書のピン留めシナリオ用の Azure Database for PostgreSQL フレキシブル サーバーで Azure Kubernetes Service (AKS) を使用する場合にルート CA 証明書を更新する
Azure Kubernetes Services (AKS) でホストされているアプリケーションを使用して Azure Database for PostgreSQL に接続して証明書をピン留めしようとしている場合は、専用の顧客ホスト環境からのアクセスと同様です。 こちらの手順を参照してください。
証明書のピン留めシナリオ用の Azure Database for PostgreSQL フレキシブル サーバーでの Windows 上の .NET (Npgsql) ユーザー用ルート CA 証明書の更新
Windows 上の .NET (Npgsql) ユーザーの場合、Azure Database for PostgreSQL - フレキシブル サーバーに接続する場合は、Microsoft RSA Root Certificate Authority 2017、DigiCert Global Root G2、Digicert Global Root CA の 3 つすべてが Windows 証明書ストアの信頼されたルート証明機関に存在することを確認します。 いずれかの証明書が存在しない場合は、不足している証明書をインポートします。
証明書のピン留めシナリオ用に他のクライアントのルート CA 証明書を更新する
その他の 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 portal または Azure CLI でプライベート アクセス (VNet 統合) オプションを使って Azure Database for PostgreSQL フレキシブル サーバー インスタンスを作成する方法について説明します。
- Azure portal または Azure CLI でパブリック アクセス (許可された IP アドレス) オプションを使って Azure Database for PostgreSQL フレキシブル サーバー インスタンスを作成する方法について学習します。