TLS-clientcertificaten voor toepassingsclients bijwerken met Azure Database for PostgreSQL - Flexibele server
VAN TOEPASSING OP: Azure Database for PostgreSQL - Flexibele server
Basis-CA-certificaten importeren in Java Key Store op de client voor scenario's voor het vastmaken van certificaten
Aangepaste java-toepassingen maken gebruik van een standaardsleutelarchief, cacerts genaamd, dat vertrouwde CA-certificaten (certificate authority) bevat. Het wordt ook wel Java Trust Store genoemd. Een certificaatbestand met de naam cacerts bevindt zich in de map met beveiligingseigenschappen, java.home\lib\security, waarbij java.home de directory van de runtime-omgeving is (de jre-map in de SDK of de map op het hoogste niveau van de Java™ 2 Runtime-omgeving). U kunt de volgende aanwijzingen gebruiken om ca-certificaten van de clienthoofdmap bij te werken voor scenario's voor het vastmaken van clientcertificaten met PostgreSQL Flexible Server:
- Controleer cacerts java-sleutelarchief om te zien of deze al vereiste certificaten bevat. U kunt certificaten in java-sleutelarchief weergeven met behulp van de volgende opdracht:
keytool -list -v -keystore ..\lib\security\cacerts > outputfile.txt
Als de benodigde certificaten niet aanwezig zijn in het Java-sleutelarchief op de client, zoals kan worden ingecheckt in de uitvoer, moet u doorgaan met de volgende instructies:
Maak een back-up van uw aangepaste sleutelarchief.
Download certificaten en sla deze lokaal op waar u ernaar kunt verwijzen.
Genereer een gecombineerd CA-certificaatarchief met alle benodigde basis-CA-certificaten. Hieronder ziet u hoe u DefaultJavaSSLFactory gebruikt voor PostgreSQL JDBC-gebruikers.
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
Vervang het oorspronkelijke sleutelarchiefbestand door het nieuwe gegenereerde bestand:
System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file"); System.setProperty("javax.net.ssl.trustStorePassword","password");
Vervang het oorspronkelijke BASIS-CA-pem-bestand door het gecombineerde basis-CA-bestand en start de toepassing/client opnieuw op.
Raadpleeg deze documentatie voor meer informatie over het configureren van clientcertificaten met postgreSQL JDBC-stuurprogramma.
Notitie
Als u certificaten wilt importeren in clientcertificaatarchieven, moet u certificaat .crt-bestanden mogelijk converteren naar pem-indeling. U kunt het hulpprogramma OpenSSL gebruiken om deze bestandsconversies uit te voeren.
Lijst met vertrouwde certificaten in Java Key Store programmatisch ophalen
Zoals hierboven vermeld, slaat Java standaard de vertrouwde certificaten op in een speciaal bestand met de naam cacerts dat zich in de java-installatiemap op de client bevindt. Voorbeeld hieronder leest cacerts en laadt deze in KeyStore-object:
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;
}
Het standaardwachtwoord voor cacerts is changeit , maar moet afwijken op echte client, omdat beheerders het wijzigen van het wachtwoord onmiddellijk na de installatie van Java aanbevelen. Zodra we het KeyStore-object hebben geladen, kunnen we de PKIXParameters-klasse gebruiken om certificaten te lezen die aanwezig zijn.
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());
}
Basis-CA-certificaten bijwerken bij het gebruik van clients in Azure-app Services met Azure Database for PostgreSQL - Flexible Server voor scenario's voor het vastmaken van certificaten
Voor Azure-app services, die verbinding maken met Azure Database for PostgreSQL, kunnen we twee mogelijke scenario's hebben voor het bijwerken van clientcertificaten. Dit is afhankelijk van hoe u SSL gebruikt met uw toepassing die is geïmplementeerd in Azure-app Services.
- Nieuwe certificaten worden toegevoegd aan App Service op platformniveau voorafgaand aan wijzigingen in Azure Database for PostgreSQL - Flexible Server. Als u de SSL-certificaten gebruikt die zijn opgenomen in het App Service-platform in uw toepassing, hoeft u geen actie te ondernemen. Raadpleeg de volgende Azure-app Service-documentatie voor meer informatie.
- Als u expliciet het pad naar het SSL-certificaatbestand in uw code opgeeft, moet u het nieuwe certificaat downloaden en de code bijwerken om het nieuwe certificaat te gebruiken. Een goed voorbeeld van dit scenario is wanneer u aangepaste containers in App Service gebruikt als gedeeld in de App Service-documentatie
Basis-CA-certificaten bijwerken bij het gebruik van clients in Azure Kubernetes Service (AKS) met Azure Database for PostgreSQL - Flexible Server voor scenario's voor het vastmaken van certificaten
Als u verbinding probeert te maken met Azure Database for PostgreSQL met behulp van toepassingen die worden gehost in Azure Kubernetes Services (AKS) en certificaten vastmaken, is dit vergelijkbaar met toegang vanuit een toegewezen klantenhostomgeving. Raadpleeg de stappen hier.
Basis-CA-certificaten bijwerken voor .NET-gebruikers (Npgsql) in Windows met Azure Database for PostgreSQL - Flexible Server voor scenario's voor het vastmaken van certificaten
Voor .NET-gebruikers (Npgsql) in Windows, die verbinding maken met Azure Database for PostgreSQL - Flexible Servers, moet u ervoor zorgen dat alle drie de Microsoft RSA Root Authority 2017, DigiCert Global Root G2 en Digicert Global Root CA allemaal aanwezig zijn in het Windows-certificaatarchief, vertrouwde basiscertificeringsinstanties. Als er geen certificaten bestaan, importeert u het ontbrekende certificaat.
Basis-CA-certificaten bijwerken voor andere clients voor scenario's voor het vastmaken van certificaten
Voor andere PostgreSQL-clientgebruikers kunt u twee CA-certificaatbestanden samenvoegen, zoals hieronder.
-----BEGIN CERTIFICATE-----
(Root CA1: DigiCertGlobalRootCA.crt.pem)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Root CA2: Microsoft ECC Root Certificate Authority 2017.crt.pem)
-----END CERTIFICATE-----
Deel uw suggesties en bugs met het productteam van Azure Database for PostgreSQL.