Sdílet prostřednictvím


Aktualizace klientských certifikátů TLS pro klienty aplikací pomocí flexibilního serveru Azure Database for PostgreSQL

PLATÍ PRO: Flexibilní server Azure Database for PostgreSQL

Import kořenových certifikátů certifikační autority v úložišti klíčů Java v klientovi pro scénáře připnutí certifikátu

Vlastní napsané aplikace v Javě používají výchozí úložiště klíčů označované jako cacerts, které obsahují certifikáty důvěryhodné certifikační autority (CA). Často se také označuje jako úložiště důvěryhodnosti Java. Soubor certifikátů s názvem cacerts se nachází v adresáři vlastností zabezpečení java.home\lib\security, kde java.home je adresář prostředí runtime (adresář jre v sadě SDK nebo adresář nejvyšší úrovně prostředí Java™ 2 Runtime Environment). Pomocí následujících pokynů můžete aktualizovat certifikáty kořenové certifikační autority klienta pro scénáře připnutí klientských certifikátů s flexibilním serverem PostgreSQL:

  1. Zkontrolujte cacerts java keystore a zjistěte, jestli už obsahuje požadované certifikáty. Certifikáty v úložišti klíčů Java můžete vypsat pomocí následujícího příkazu:
  keytool -list -v -keystore ..\lib\security\cacerts > outputfile.txt

Pokud v úložišti klíčů Java v klientovi nejsou k dispozici potřebné certifikáty, jak je možné vrátit se změnami ve výstupu, měli byste pokračovat následujícími pokyny:

  1. Vytvořte záložní kopii vlastního úložiště klíčů.

  2. Stáhněte si certifikáty a uložte je místně, kde na tyto odkazy můžete odkazovat.

  3. Vygenerujte kombinované úložiště certifikátů certifikační autority se všemi potřebnými certifikáty kořenové certifikační autority. Následující příklad ukazuje použití DefaultJavaSSLFactory pro uživatele PostgreSQL JDBC.

        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
    
  4. Nahraďte původní soubor úložiště klíčů novým vygenerovaným souborem:

    System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
    System.setProperty("javax.net.ssl.trustStorePassword","password");
    
  5. Nahraďte původní soubor pem kořenové certifikační autority sloučeným kořenovým souborem CA a restartujte aplikaci nebo klienta.

Další informace o konfiguraci klientských certifikátů pomocí ovladače PostgreSQL JDBC najdete v této dokumentaci.

Poznámka:

Pokud chcete importovat certifikáty do úložišť klientských certifikátů, možná budete muset převést soubory .crt certifikátu do formátu .pem. Tyto převody souborů můžete provést pomocí nástroje OpenSSL.

Získání seznamu důvěryhodných certifikátů v úložišti klíčů Java prostřednictvím kódu programu

Jak je uvedeno výše, Java ve výchozím nastavení ukládá důvěryhodné certifikáty do speciálního souboru s názvem cacerts , který se nachází uvnitř instalační složky Javy v klientovi. Následující příklad nejprve načte certifikáty cacert a načte ho do objektu 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;
}

Výchozí heslo pro cacerts je changeit , ale mělo by se lišit na skutečném klientovi, protože správci doporučují změnu hesla ihned po instalaci Javy. Po načtení objektu KeyStore můžeme ke čtení přítomen certifikáty použít třídu 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());
}

Aktualizace certifikátů kořenové certifikační autority při používání klientů ve službě Aplikace Azure Services s flexibilním serverem Azure Database for PostgreSQL pro scénáře připnutí certifikátů

Pro Aplikace Azure služby můžeme mít připojení ke službě Azure Database for PostgreSQL dva možné scénáře aktualizace klientských certifikátů a závisí na tom, jak používáte SSL s aplikací nasazenou do služby Aplikace Azure Services.

  • Nové certifikáty se do služby App Service přidají na úrovni platformy před změnami na flexibilním serveru Azure Database for PostgreSQL. Pokud ve vaší aplikaci používáte certifikáty SSL zahrnuté na platformě služby App Service, není potřeba žádná akce. Další informace najdete v dokumentaci ke službě Aplikace Azure Service.
  • Pokud do kódu explicitně zahrnete cestu k souboru certifikátu SSL, budete muset stáhnout nový certifikát a aktualizovat kód tak, aby používal nový certifikát. Dobrým příkladem tohoto scénáře je použití vlastních kontejnerů ve službě App Service jako sdílené v dokumentaci ke službě App Service.

Aktualizace certifikátů kořenové certifikační autority při použití klientů ve službě Azure Kubernetes Service (AKS) s využitím flexibilního serveru Azure Database for PostgreSQL pro scénáře připnutí certifikátů

Pokud se pokoušíte připojit ke službě Azure Database for PostgreSQL pomocí aplikací hostovaných ve službě Azure Kubernetes Services (AKS) a připnutí certifikátů, je to podobné přístupu z hostitelského prostředí vyhrazených zákazníků. Postup najdete tady.

Aktualizace certifikátů kořenové certifikační autority pro uživatele .NET (Npgsql) ve Windows pomocí flexibilního serveru Azure Database for PostgreSQL pro scénáře připnutí certifikátů

Pro uživatele .NET (Npgsql) ve Windows, připojení k flexibilním serverům Azure Database for PostgreSQL, ujistěte se, že všechny tři kořenové certifikační autority Microsoft RSA 2017, DigiCert Global Root G2 a také globální kořenová certifikační autorita Digicert existují v úložišti certifikátů Windows, důvěryhodné kořenové certifikační autority. Pokud nějaké certifikáty neexistují, naimportujte chybějící certifikát.

Aktualizace certifikátů kořenové certifikační autority pro ostatní klienty pro scénáře připnutí certifikátů

Pro ostatní uživatele klienta PostgreSQL můžete sloučit dva soubory certifikátů certifikační autority, jako je tento formát níže.

-----BEGIN CERTIFICATE-----
(Root CA1: DigiCertGlobalRootCA.crt.pem)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Root CA2: Microsoft ECC Root Certificate Authority 2017.crt.pem)
-----END CERTIFICATE-----