你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将应用程序连接到Azure Database for PostgreSQL时,应用程序客户端必须安装受信任的根证书。 以下部分将指导你更新应用程序的受信任根证书。 此过程是连接到Azure Database for PostgreSQL灵活服务器的应用程序的常见方案。
重要
Microsoft轮换 Azure Database for PostgreSQL 的 TLS 证书 ,以更新证书颁发机构和生成的证书链。
如果客户端 配置使用 TLS 的建议配置,则无需执行作。
中间证书轮换计划:
- Azure 区域(美国中西部和东亚)的更新已完成。
- 英国南部和美国政府区域的更新从 2026 年 1 月 21 日开始。
- 美国中部的更新从 2026 年 1 月 26 日开始。
- 所有其他区域的更新从 2026 年 1 月 28 日开始。
根证书轮换计划:
- 从 2026 年 3 月 9 日起,针对中国区域的根 CA 证书,将从 DigiCert 全球根 CA (G1) 更新为 DigiCert 全球根 G2。
在客户端的 Java 密钥存储中导入根 CA 证书 - 针对证书固定应用场景
自定义编写的 Java 应用程序使用名为 cacerts 的默认密钥存储,其中包含受信任的证书颁发机构 (CA) 证书。 它通常也称为 Java 信任存储。 名为证书cacerts文件的驻留在安全属性目录中,java.home\lib\security其中java.home是运行时环境目录(jreSDK 中的目录或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 驱动程序配置客户端证书,请参阅此文档。
注释
若要将证书导入客户端证书存储,可能需要将证书 .crt 文件转换为 .pem 格式。 可以使用执行这些文件转换的 OpenSSL 实用工具。
以编程方式获取 Java 密钥存储中受信任的证书列表
默认情况下,Java 将受信任的证书存储在位于 cacerts 客户端上的 Java 安装文件夹中的特殊文件中。
以下示例读取 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 应用服务中使用客户端时更新根 CA 证书 - 针对证书固定应用场景
对于连接到Azure Database for PostgreSQL灵活服务器的Azure 应用服务,存在两种更新客户端证书的可能方案。 具体方案取决于如何将 SSL 用于部署到 Azure 应用 Services 的应用程序。
- 在Azure Database for PostgreSQL灵活服务器发生更改之前,平台会将新证书添加到应用服务。 如果你在应用程序中使用应用服务平台上包含的 SSL 证书,则无需执行任何操作。 有关详细信息,请参阅 Azure 应用服务文档中的 Azure 应用服务中的“添加和管理 TLS/SSL 证书 ”。
- 如果在代码中显式包含 SSL 证书文件的路径,则需要下载新证书并更新代码以使用它。 此场景的一个很好的示例是:当你在 Azure 应用服务 中使用自定义容器时,如 Azure 应用服务 文档中的 教程:为 Azure 应用服务 中的自定义容器配置边车容器 所述。
在 Azure Kubernetes 服务 (AKS) 中使用客户端时更新根 CA 证书 - 针对证书固定应用场景
如果尝试使用 Azure Kubernetes 服务 (AKS) 中托管的应用程序连接到 Azure Database for PostgreSQL 并固定证书,则与从专用客户主机环境进行访问类似。 请参考此处的步骤。
更新 Windows 上 .NET (Npgsql) 用户的根 CA 证书 - 针对证书固定应用场景
对于在 Windows 上连接到 Azure Database for PostgreSQL 灵活服务器的 .NET (Npgsql) 用户,请确保这三个证书——Microsoft RSA Root Certificate Authority 2017、DigiCert Global Root G2 和 DigiCert Global Root CA——都存在于 Windows 证书存储中的“受信任的根证书颁发机构”下。 如果有任何证书不存在,请导入缺失的证书。
更新其他客户端的根 CA 证书 - 针对证书固定应用场景
对于其他 PostgreSQL 客户端用户,可以使用以下格式合并两个 CA 证书文件:
-----BEGIN CERTIFICATE-----
(Root CA1: DigiCertGlobalRootCA.crt.pem)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Root CA2: Microsoft ECC Root Certificate Authority 2017.crt.pem)
-----END CERTIFICATE-----