Aktualizace klientských certifikátů aplikací v Azure HorizonDB (Preview)

Když připojíte aplikace k Azure HorizonDB, klient aplikace musí nainstalovat důvěryhodné kořenové certifikáty. Následující části vás provedou aktualizací důvěryhodných kořenových certifikátů pro aplikace, což je běžný scénář pro aplikace připojující se k instanci Azure HorizonDB.

Importujte kořenové certifikáty certifikační autority do úložiště klíčů Java KeyStore na klientovi pro scénáře pinningu certifikátů

Vlastní napsané aplikace v Javě používají výchozí úložiště klíčů s názvem cacerts, které obsahuje certifikáty důvěryhodné certifikační autority (CA). Často se také označuje jako Java úložiště důvěry. 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 ( jre adresář 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ů pomocí PostgreSQL:

  1. cacerts Zkontrolujte, jestli úložiště klíčů Java neobsahuje požadované certifikáty. Certifikáty můžete v úložišti klíčů Java 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 můžete zkontrolovat ve výstupu, pokračujte následujícími pokyny:

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

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

  4. Vygenerujte kombinované úložiště s certifikáty kořenových certifikačních autorit, které obsahuje všechny potřebné certifikáty. 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
    
  5. 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");
    
  6. Nahraďte původní soubor PEM kořenové CA souborem sloučené kořenové CA a restartujte aplikaci či klienta.

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

    Note

    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. Tls (Transport Layer Security) můžete použít v Azure HorizonDB (Preview).

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

Ve výchozím nastavení ukládá Java důvěryhodné certifikáty do speciálního souboru s názvem cacerts , který se nachází v instalační složce Jazyka Java v klientovi. Následující příklad nejprve přečte cacerts 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 je cacertschangeit , 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í aktuálně přítomných certifikátů 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žití klientů ve službě Aplikace Azure Services pro scénáře připnutí certifikátů

Při připojení služby Aplikace Azure Services k instanci Azure HorizonDB mohou při aktualizaci klientských certifikátů nastat dva možné scénáře a záleží na tom, jak ve své aplikaci nasazené v Aplikace Azure Services používáte SSL.

  • Nové certifikáty se do služby App Service přidají na úrovni platformy předtím, než dojde ke změnám ve vaší instanci Azure HorizonDB. 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 tématu Přidání a správa certifikátů TLS/SSL ve službě Azure App Service v dokumentaci ke službě Azure App 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 ho používal. Dobrým příkladem tohoto scénáře je použití vlastních kontejnerů ve službě App Service, jak je popsáno v Tutoriál: Konfigurace sidecar kontejneru pro vlastní kontejnery ve službě Azure App Service v dokumentaci ke službě Azure App Service.

Aktualizace certifikátů kořenové certifikační autority při použití klientů v Azure Kubernetes Service (AKS) pro scénáře připnutí certifikátů

Pokud se pokoušíte připojit k Azure HorizonDB 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ého zákazníka. Postup najdete tady.

Aktualizujte certifikáty kořenových certifikačních autorit pro uživatele .NET (Npgsql) v systému Windows pro scénáře s připnutím certifikátů

Pro uživatele .NET (Npgsql) v systému Windows, kteří se připojují k Azure HorizonDB, se ujistěte, že všechny tři certifikáty Microsoft RSA Root Certificate Authority 2017, DigiCert Global Root G2 a DigiCert Global Root CA jsou přítomny v úložišti certifikátů systému Windows v části 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átu

Pro ostatní uživatele klienta PostgreSQL můžete sloučit dva soubory certifikátů certifikační autority pomocí následujícího formátu:

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