Udostępnij za pośrednictwem


Aktualizowanie certyfikatów TLS klienta dla klientów aplikacji za pomocą usługi Azure Database for PostgreSQL — serwer elastyczny

DOTYCZY: Azure Database for PostgreSQL — serwer elastyczny

Importowanie certyfikatów głównego urzędu certyfikacji w magazynie kluczy Java na kliencie na potrzeby scenariuszy przypinania certyfikatów

Niestandardowe aplikacje Java używają domyślnego magazynu kluczy o nazwie cacerts, który zawiera certyfikaty zaufanego urzędu certyfikacji. Jest również często znany jako magazyn zaufania języka Java. Plik certyfikatów o nazwie cacerts znajduje się w katalogu właściwości zabezpieczeń java.home\lib\security, gdzie java.home jest katalogiem środowiska uruchomieniowego (katalog jre w zestawie SDK lub katalogu najwyższego poziomu środowiska uruchomieniowego Java™ 2). Aby zaktualizować certyfikaty głównego urzędu certyfikacji klienta dla scenariuszy przypinania certyfikatów klienta za pomocą serwera elastycznego PostgreSQL, można użyć następujących wskazówek:

  1. Sprawdź magazyn kluczy java cacerts , aby sprawdzić, czy zawiera już wymagane certyfikaty. Certyfikaty można wyświetlić w magazynie kluczy Java przy użyciu następującego polecenia:
  keytool -list -v -keystore ..\lib\security\cacerts > outputfile.txt

Jeśli wymagane certyfikaty nie są obecne w magazynie kluczy java na kliencie, jak można zaewidencjonować w danych wyjściowych, należy postępować zgodnie z następującymi wskazówkami:

  1. Utwórz kopię zapasową niestandardowego magazynu kluczy.

  2. Pobierz certyfikaty i zapisz je lokalnie, gdzie można się do nich odwoływać.

  3. Wygeneruj połączony magazyn certyfikatów urzędu certyfikacji ze wszystkimi wymaganymi certyfikatami głównego urzędu certyfikacji. W poniższym przykładzie pokazano użycie elementu DefaultJavaSSLFactory dla użytkowników JDBC bazy danych PostgreSQL.

        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. Zastąp oryginalny plik magazynu kluczy nowym wygenerowaną:

    System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
    System.setProperty("javax.net.ssl.trustStorePassword","password");
    
  5. Zastąp oryginalny plik pem głównego urzędu certyfikacji połączonym głównym urzędem certyfikacji i uruchom ponownie aplikację/klienta.

Aby uzyskać więcej informacji na temat konfigurowania certyfikatów klienta za pomocą sterownika JDBC bazy danych PostgreSQL, zobacz tę dokumentację.

Uwaga

Aby zaimportować certyfikaty do magazynów certyfikatów klienta, może być konieczne przekonwertowanie plików crt certyfikatu na format pem. Możesz użyć narzędzia OpenSSL, aby wykonać te konwersje plików.

Programowe pobieranie listy zaufanych certyfikatów w magazynie kluczy Java

Jak wspomniano powyżej, język Java domyślnie przechowuje zaufane certyfikaty w specjalnym pliku o nazwie cacerts , który znajduje się w folderze instalacyjnym Języka Java na kliencie. Poniższy przykład najpierw odczytuje certyfikaty cacerts i ładuje je do obiektu 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;
}

Domyślne hasło dla certyfikatów cacerts to changeit , ale powinno być inne na rzeczywistym kliencie, ponieważ administratorzy zaleca zmianę hasła natychmiast po zainstalowaniu języka Java. Po załadowaniu obiektu KeyStore możemy użyć klasy PKIXParameters do odczytywania certyfikatów obecnych.

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());
}

Aktualizowanie certyfikatów głównego urzędu certyfikacji podczas korzystania z klientów w usługach aplikacja systemu Azure za pomocą usługi Azure Database for PostgreSQL — serwer elastyczny na potrzeby scenariuszy przypinania certyfikatów

W przypadku usług aplikacja systemu Azure łączenie się z usługą Azure Database for PostgreSQL może mieć dwa możliwe scenariusze dotyczące aktualizowania certyfikatów klienta i zależy od tego, jak używasz protokołu SSL z aplikacją wdrożona w usługach aplikacja systemu Azure Services.

  • Nowe certyfikaty są dodawane do usługi App Service na poziomie platformy przed zmianami w usłudze Azure Database for PostgreSQL — serwer elastyczny. Jeśli używasz certyfikatów SSL zawartych na platformie App Service w aplikacji, nie jest wymagana żadna akcja. Aby uzyskać więcej informacji, zapoznaj się z następującą dokumentacją usługi aplikacja systemu Azure Service.
  • Jeśli jawnie dołączasz ścieżkę do pliku certyfikatu SSL w kodzie, musisz pobrać nowy certyfikat i zaktualizować kod, aby używał nowego certyfikatu. Dobrym przykładem tego scenariusza jest użycie kontenerów niestandardowych w usłudze App Service jako udostępnionej w dokumentacji usługi App Service

Aktualizowanie certyfikatów głównego urzędu certyfikacji podczas korzystania z klientów w usłudze Azure Kubernetes Service (AKS) przy użyciu usługi Azure Database for PostgreSQL — serwer elastyczny na potrzeby scenariuszy przypinania certyfikatów

Jeśli próbujesz nawiązać połączenie z usługą Azure Database for PostgreSQL przy użyciu aplikacji hostowanych w usługach Azure Kubernetes Services (AKS) i przypinania certyfikatów, jest ona podobna do dostępu z dedykowanego środowiska hosta klientów. Zapoznaj się z krokami tutaj.

Aktualizowanie certyfikatów głównego urzędu certyfikacji dla użytkowników platformy .NET (Npgsql) w systemie Windows przy użyciu usługi Azure Database for PostgreSQL — serwer elastyczny na potrzeby scenariuszy przypinania certyfikatów

W przypadku użytkowników platformy .NET (Npgsql) w systemie Windows nawiąż połączenie z usługą Azure Database for PostgreSQL — serwery elastyczne, upewnij się, że wszystkie trzy główne urzędy certyfikacji Firmy Microsoft RSA 2017, DigiCert Global Root G2, a także wszystkie globalne główne urzędy certyfikacji firmy Digicert istnieją w magazynie certyfikatów systemu Windows, zaufanych głównych urzędach certyfikacji. Jeśli jakiekolwiek certyfikaty nie istnieją, zaimportuj brakujący certyfikat.

Aktualizowanie certyfikatów głównego urzędu certyfikacji dla innych klientów w scenariuszach przypinania certyfikatów

W przypadku innych użytkowników klientów postgreSQL można scalić dwa pliki certyfikatów urzędu certyfikacji, takie jak w poniższym formacie.

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

Podziel się swoimi sugestiami i usterkami z zespołem produktu usługi Azure Database for PostgreSQL.