Freigeben über


Aktualisieren von Anwendungsclientzertifikaten

GILT FÜR: Azure Database for PostgreSQL – Flexible Server

Importieren von Stamm-Zertifizierungsstellenzertifikaten im Java-Keystore auf dem Client für Szenarien zum Anheften von Zertifikaten

Benutzerdefinierte Java-Anwendungen verwenden einen Standardschlüsselspeicher namens cacerts, der Zertifikate von vertrauenswürdigen Zertifizierungsstellen (CA) enthält. Es wird auch häufig als Java-Vertrauensspeicher bezeichnet. Eine Zertifikatdatei mit dem Namen cacerts befindet sich im Sicherheitseigenschaftenverzeichnis java.home\lib\security, wobei java.home das Laufzeitumgebungsverzeichnis ist (das jre Verzeichnis im SDK oder das Verzeichnis der obersten Ebene der Java™ 2-Runtime-Umgebung). Sie können die folgenden Anweisungen verwenden, um Stamm-Zertifizierungsstellenzertifikate auf dem Client für Szenarien zum Anheften von Clientzertifikaten mit Azure Database für PostgreSQL – Flexibler Server zu aktualisieren:

  1. Überprüfen Sie cacerts den Java Keystore, um festzustellen, ob er bereits erforderliche Zertifikate enthält. Sie können Zertifikate im Java-Keystore mithilfe des folgenden Befehls auflisten:
  keytool -list -v -keystore ..\lib\security\cacerts > outputfile.txt

Wenn die erforderlichen Zertifikate nicht im Java-Keystore auf dem Client vorhanden sind, wie in der Ausgabe überprüft werden kann, sollten Sie mit den folgenden Anweisungen fortfahren:

  1. Erstellen Sie eine Sicherungskopie Ihres benutzerdefinierten Keystores.

  2. Laden Sie Zertifikate herunter, und speichern Sie sie lokal, wo Sie darauf verweisen können.

  3. Generieren Sie einen kombinierten ZS-Zertifikatspeicher mit allen benötigten Stamm-Zertifizierungsstellenzertifikaten. Das folgende Beispiel zeigt die Verwendung von DefaultJavaSSLFactory für PostgreSQL-JDBC-Benutzer.

        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. Ersetzen Sie die ursprüngliche Keystore-Datei durch die neu generierte Datei:

    System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
    System.setProperty("javax.net.ssl.trustStorePassword","password");
    
  5. Ersetzen Sie die ursprüngliche PEM-Datei der Stammzertifizierungsstelle durch die kombinierte Datei der Stammzertifizierungsstelle, und starten Sie die Anwendung bzw. den Client neu.

Weitere Informationen zum Konfigurieren von Clientzertifikaten mit dem PostgreSQL-JDBC-Treiber finden Sie in dieser Dokumentation.

Hinweis

Um Zertifikate in Clientzertifikatspeicher zu importieren, müssen Sie möglicherweise Zertifikat-CRT-Dateien in das PEM-Format konvertieren. Sie können OpenSSL-Hilfsprogramm verwenden, um diese Dateikonvertierungen durchzuführen.

Programmgesteuertes Abrufen einer Liste vertrauenswürdiger Zertifikate im Java Key Store

Standardmäßig speichert Java die vertrauenswürdigen Zertifikate in einer speziellen Datei cacerts , die sich im Java-Installationsordner auf dem Client befindet. Im folgenden Beispiel wird cacerts zuerst gelesen und in das KeyStore-Objekt geladen.

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

Das Standardkennwort lautet cacertschangeit , sollte sich jedoch auf echtem Client unterscheiden, da Administratoren das Ändern des Kennworts unmittelbar nach der Java-Installation empfehlen. Nachdem wir das KeyStore-Objekt geladen haben, können wir die PKIXParameters-Klasse verwenden, um vorhandene Zertifikate zu lesen.

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

Aktualisieren Sie Stammzertifikate bei Verwendung von Clients in Azure App Services für Zertifikats-Pinning-Szenarien

Für Azure App-Dienste gibt es bei der Verbindung zu einem Azure-Datenbank für PostgreSQL flexiblen Server zwei mögliche Szenarien für die Aktualisierung von Clientzertifikaten. Es hängt davon ab, wie Sie SSL in Ihrer für Azure App Services bereitgestellten Anwendung verwenden.

Aktualisieren von Stammzertifizierungsstellenzertifikaten bei Verwendung von Clients in Azure Kubernetes Service (AKS) für Szenarien zum Anheften von Zertifikaten

Wenn Sie versuchen, mithilfe von Anwendungen, die in Azure Kubernetes Services (AKS) gehostet werden, eine Verbindung mit der Azure-Datenbank für PostgreSQL herzustellen und Zertifikate anzuheften, ähnelt es dem Zugriff von der Hostumgebung eines dedizierten Kunden. Die entsprechenden Schritte finden Sie hier.

Aktualisierung der Stammzertifikate für .NET-Benutzer (Npgsql) unter Windows für Szenarien mit Zertifikat-Pinning

Stellen Sie für .NET (Npgsql)-Benutzer unter Windows eine Verbindung mit Azure Database for PostgreSQL – Flexible Server sicher, dass alle drei, nämlich die Microsoft RSA Root Certificate Authority 2017, DigiCert Global Root G2 sowie Digicert Global Root CA, im Windows Certificate Store, Trusted Root Certification Authorities vorhanden sind. Ist eines der Zertifikate nicht vorhanden, importieren Sie das fehlende Zertifikat.

Aktualisieren von Stamm-Zertifizierungsstellenzertifikaten für andere Clients für Szenarien zum Anheften von Zertifikaten

Für andere PostgreSQL-Clientbenutzer können Sie zwei Zertifizierungsstellenzertifikatdateien mit dem folgenden Format zusammenführen:

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