Condividi tramite


Aggiornare i certificati TLS client per i client dell'applicazione con Database di Azure per PostgreSQL - Server flessibile

SI APPLICA A: Database di Azure per PostgreSQL - Server flessibile

Importare i certificati CA radice nell'archivio chiavi Java nel client per gli scenari di aggiunta di certificati

Le applicazioni Java scritte in modo personalizzato usano un archivio chiavi predefinito, denominato cacerts, che contiene certificati dell'autorità di certificazione (CA) attendibili. È anche noto come archivio attendibilità Java. Un file di certificati denominato cacerts risiede nella directory delle proprietà di sicurezza java.home\lib\security, dove java.home è la directory dell'ambiente di runtime (la directory JRE nell'SDK o la directory di primo livello dell'ambiente di runtime Java™ 2). È possibile usare le istruzioni seguenti per aggiornare i certificati CA radice del client per gli scenari di aggiunta di certificati client con il server flessibile PostgreSQL:

  1. Controllare l'archivio chiavi Java cacerts per verificare se contiene già i certificati necessari. È possibile elencare i certificati nell'archivio chiavi Java usando il comando seguente:
  keytool -list -v -keystore ..\lib\security\cacerts > outputfile.txt

Se i certificati necessari non sono presenti nell'archivio chiavi Java nel client, come è possibile verificare nell'output, è necessario procedere con le istruzioni seguenti:

  1. Creare una copia di backup dell'archivio chiavi personalizzato.

  2. Scaricare i certificati e salvarli in locale dove è possibile farvi riferimento.

  3. Generare un archivio certificati CA combinato con tutti i certificati CA radice necessari sono inclusi. L'esempio seguente mostra l'uso di DefaultJavaSSLFactory per gli utenti JDBC di 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. Sostituire il file dell'archivio chiavi originale con quello nuovo generato:

    System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
    System.setProperty("javax.net.ssl.trustStorePassword","password");
    
  5. Sostituire il file .pem CA radice originale con il file CA radice combinato e riavviare l'applicazione/client.

Per altre informazioni sulla configurazione dei certificati client con il driver JDBC PostgreSQL, vedere questa documentazione.

Nota

Per importare i certificati negli archivi certificati client, potrebbe essere necessario convertire i file con estensione CRT del certificato in formato PEM. È possibile usare l'utilità OpenSSL per eseguire queste conversioni di file.

Ottenere un elenco di certificati attendibili nell'archivio chiavi Java a livello di codice

Come indicato in precedenza, Java, per impostazione predefinita, archivia i certificati attendibili in un file speciale denominato cacerts che si trova all'interno della cartella di installazione Java nel client. L'esempio seguente legge innanzitutto cacerts e lo carica nell'oggetto 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;
}

La password predefinita per cacerts è changeit, ma deve essere diversa nel client reale, perché gli amministratori consigliano di modificare la password immediatamente dopo l'installazione di Java. Dopo aver caricato l'oggetto KeyStore, è possibile usare la classe PKIXParameters per leggere i certificati presenti.

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

Aggiornare i certificati CA radice quando si usano i client in Servizi app di Azure con Database di Azure per PostgreSQL - Server flessibile per scenari di aggiunta di certificati

Per i servizi app di Azure, connettendosi a Database di Azure per PostgreSQL è possibile avere due possibili scenari sull'aggiornamento dei certificati client, che dipendono da come si usa SSL con l'applicazione distribuita in Servizi app di Azure.

  • I nuovi certificati vengono aggiunti al servizio app a livello di piattaforma prima delle modifiche nel server flessibile di Database di Azure per PostgreSQL. Se si usano i certificati SSL inclusi nella piattaforma del servizio app nell'applicazione, non è necessaria alcuna azione. Per altre informazioni, vedere la documentazione del Servizio app di Azure.
  • Se si include in modo esplicito il percorso del file di certificato SSL nel codice, è necessario scaricare il nuovo certificato e aggiornare il codice per usarlo. Un buon esempio di questo scenario è quello in cui si usano contenitori personalizzati nel servizio app come illustrato nella documentazione del servizio app

Aggiornare i certificati CA radice quando si usano client nel servizio Azure Kubernetes con Database di Azure per PostgreSQL - Server flessibile per gli scenari di aggiunta di certificati

Se si sta provando a connettersi al Database di Azure per PostgreSQL usando applicazioni ospitate nei servizi Azure Kubernetes e aggiungendo certificati, è simile all'accesso da un ambiente host clienti dedicato. Fare riferimento ai passaggi illustrati qui.

Aggiornamento dei certificati CA radice per gli utenti di .NET (Npgsql) in Windows con Database di Azure per PostgreSQL - Server flessibile per gli scenari di aggiunta di certificati

Per gli utenti di .NET (Npgsql) in Windows, connettersi a Database di Azure per PostgreSQL - Server flessibili, assicurarsi che tutte e tre le Autorità di certificazione radice Microsoft RSA 2017, DigiCert Global Root G2 e Digicert Global Root CA esistano nell'archivio certificati Windows, Autorità di certificazione radice attendibili. Se non esistono certificati, importare il certificato mancante.

Aggiornamento dei certificati CA radice per altri client per scenari di aggiunta di certificati

Per altri utenti client PostgreSQL, è possibile unire due file di certificato CA come questo formato di seguito.



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