Condividi tramite


Aggiornare i certificati client dell'applicazione

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

Importare certificati CA radice nell'archivio chiavi Java nel client, per gli scenari di associazione 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 si trova nella directory delle proprietà di sicurezza java.home\lib\security, dove java.home è la directory dell'ambiente di runtime (la jre directory 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 associazione di certificati client con PostgreSQL - Server flessibile:

  1. Controllare cacerts l'archivio chiavi Java 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 controllare nell'output, è consigliabile 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 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 programmaticamente.

Per impostazione predefinita, Java 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 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 per scenari di associazione di certificati

Per i servizi App di Azure, connessi a un server flessibile di Database di Azure per PostgreSQL, esistono due possibili scenari relativi all'aggiornamento dei certificati client, e dipende da come SSL viene usato con l'applicazione distribuita nei servizi App di Azure.

Aggiornare i certificati CA radice quando si usano i client nel servizio Azure Kubernetes (AKS) per scenari di associazione 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 del cliente dedicato. Fare riferimento ai passaggi illustrati qui.

Aggiornare i certificati radice CA per gli utenti di .NET (Npgsql) su Windows, per scenari di associazione di certificati

Per gli utenti di .NET (Npgsql) in Windows, connettersi a Database di Azure per PostgreSQL - Server flessibile, 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 di Windows, Autorità di certificazione radice attendibili. Se non esistono certificati, importare il certificato mancante.

Aggiornare i certificati CA radice per altri client per scenari di associazione di certificati

Per altri utenti client PostgreSQL, è possibile unire due file di certificato CA usando il formato seguente:

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