Udostępnij za pośrednictwem


Aktualizowanie certyfikatów klienta aplikacji

DOTYCZY: Azure Database for PostgreSQL — serwer elastyczny

Importowanie certyfikatów głównego urzędu certyfikacji do magazynu kluczy Java na kliencie w scenariuszach 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 ( jre katalog 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ź cacerts magazyn kluczy java, 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 uzyskiwanie listy zaufanych certyfikatów w magazynie kluczy Java

Domyślnie język Java przechowuje zaufane certyfikaty w specjalnym pliku o nazwie cacerts znajdującym się w folderze instalacyjnym Java na kliencie. Poniższy przykład najpierw odczytuje cacerts, a następnie ładuje go 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 programu 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 CA podczas korzystania z klientów w Azure App Services w scenariuszach pinningu certyfikatów.

W przypadku usług Azure App Services, łączenie się z elastycznym serwerem bazy danych Azure dla PostgreSQL może mieć dwa możliwe scenariusze aktualizacji certyfikatów klienta, w zależności od tego, jak korzystasz z protokołu SSL w swojej aplikacji wdrożonej w usłudze Azure App Services.

Aktualizowanie certyfikatów Root CA podczas używania klientów w usłudze Azure Kubernetes Service (AKS) w scenariuszach 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 ze środowiska hosta dedykowanego klienta. Zapoznaj się z krokami tutaj.

Aktualizowanie certyfikatów głównego urzędu certyfikacji dla użytkowników platformy .NET (Npgsql) w systemie Windows w scenariuszach przypinania certyfikatów

W przypadku użytkowników platformy .NET (Npgsql) w systemie Windows, łącząc się z elastycznymi serwerami Azure Database for PostgreSQL, upewnij się, że wszystkie trzy certyfikaty Microsoft RSA Root Certificate Authority 2017, DigiCert Global Root G2 i DigiCert Global Root CA znajdują się w magazynie certyfikatów systemu Windows, wśród Zaufanych głównych urzędów certyfikacji. Jeśli jakiekolwiek certyfikaty nie istnieją, zaimportuj brakujący certyfikat.

Aktualizowanie certyfikatów Root CA dla innych klientów w kontekstach przypinania certyfikatów

W przypadku innych użytkowników klientów PostgreSQL można scalić dwa pliki certyfikatów urzędów certyfikacji przy użyciu następującego formatu:

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