Delen via


Clients verbinden met TLS-beveiliging met uw database

Verbindingen tussen uw clienttoepassingen en de databaseserver gebruiken altijd versleuteling met de industriestandaard Transport Layer Security (TLS), voorheen SSL (Secure Sockets Layer).

Opmerking

De open source PostgreSQL maakt gebruik van de verouderde naam SSL in de opdrachten, variabelen en documentatie om te voorkomen dat bestaande implementaties worden onderbroken. In dit artikel wordt de acroniem TLS gebruikt bij het gebruik van SSL in opdrachtnamen en variabelen.

Azure Database for PostgreSQL ondersteunt versleutelde verbindingen met behulp van TLS 1.2 en 1.3. De server weigert alle binnenkomende verbindingen die proberen het verkeer te versleutelen met behulp van TLS 1.0 en TLS 1.1.

Standaard dwingt de server beveiligde connectiviteit af tussen de client en de server. Als u deze afdwinging wilt uitschakelen en versleutelde en niet-versleutelde clientcommunicatie wilt toestaan, wijzigt u de serverparameter require_secure_transport in OFF. U kunt ook de TLS-versie instellen door de ssl_max_protocol_version serverparameter in te stellen. Niet uitschakelen TLS.

Belangrijk

Microsoft heeft een TLS-certificaatrotatie gestart voor Azure Database for PostgreSQL om tussenliggende CA-certificaten en de resulterende certificaatketen bij te werken. De root-CA's blijven hetzelfde.

Als uw clientconfiguratie gebruikmaakt van de aanbevolen configuraties voor TLS, hoeft u geen actie te ondernemen.

Planning voor tussenliggende certificaatrotatie:

  • Updates voor Azure-regio's VS - west-centraal en Azië - oost zijn voltooid.
  • Updates voor regio's VK Zuid en Amerikaanse overheid beginnen op 21 januari 2026.
  • Updates voor Centraal-VS beginnen op 26 januari 2026.
  • Updates voor alle andere regio's beginnen op 28 januari 2026.
  • Na het Voorjaarsfestival (Chinees Nieuwjaar) 2026 zullen de Chinese regio's ook een certificaatrotatie ondergaan die een wijziging omvat in een van de basis-CA's.

TLS-clientconfiguratie

Standaard controleert PostgreSQL het servercertificaat niet. Vanwege dit standaardgedrag kan de client niet detecteren of de serveridentiteit is vervalst (bijvoorbeeld als iemand een DNS-record wijzigt of het IP-adres van de server overneemt). Schakel TLS-certificaatverificatie in op de client om dit soort adresvervalsing te voorkomen.

U kunt veel verbindingsparameters configureren voor de TLS-installatie van de client. Enkele belangrijke zijn:

  • ssl: Verbinding maken met behulp van TLS. Deze eigenschap heeft geen waarde nodig. De aanwezigheid geeft een TLS-verbinding op. Gebruik de waarde truevoor compatibiliteit met toekomstige versies. Wanneer u in deze modus een TLS-verbinding tot stand brengt, valideert het clientstuurprogramma de identiteit van de server om man-in-the-middle-aanvallen te voorkomen.

  • sslmode: Stel deze parameter in op require als u versleuteling nodig hebt en wilt dat de verbinding mislukt als deze niet kan worden versleuteld. Deze instelling zorgt ervoor dat de server is geconfigureerd voor het accepteren van TLS-verbindingen voor deze host of dit IP-adres en dat de server het clientcertificaat herkent. Als de server geen TLS-verbindingen accepteert of het clientcertificaat niet wordt herkend, mislukt de verbinding. De volgende tabel bevat waarden voor deze instelling:

    sslmode Explanation
    disable Versleuteling wordt niet gebruikt. Voor Azure Database for PostgreSQL zijn TLS-verbindingen vereist, dus gebruik deze instelling niet.
    allow Versleuteling wordt gebruikt als serverinstellingen deze vereisen of afdwingen. Voor Azure Database for PostgreSQL zijn TLS-verbindingen vereist, dus deze instelling is gelijk aan prefer.
    prefer Versleuteling wordt gebruikt als serverinstellingen dit toestaan. Voor Azure Database for PostgreSQL zijn TLS-verbindingen vereist.
    require Versleuteling wordt gebruikt. Het zorgt ervoor dat de server is geconfigureerd voor het accepteren van TLS-verbindingen.
    verify-ca Versleuteling wordt gebruikt. Controleer het servercertificaat op basis van de vertrouwde basiscertificaten die zijn opgeslagen op de client.
    verify-full Versleuteling wordt gebruikt. Controleer het servercertificaat op basis van het certificaat dat is opgeslagen op de client. Ook wordt gevalideerd of de servercertificaten dezelfde hostnaam als de verbinding gebruiken. Gebruik deze instelling tenzij privé-DNS-resolvers een andere naam gebruiken om te verwijzen naar de Azure Database for PostgreSQL-server.

De standaardmodus sslmode verschilt tussen libpq-gebaseerde clients (zoals PSQL en JDBC). De libpq-clients zijn standaard preferingesteld op . JDBC clients zijn standaard ingesteld op verify-full.

  • sslcert, sslkeyen sslrootcert: deze parameters overschrijven de standaardlocatie van het clientcertificaat, de PKCS-8-clientsleutel en het basiscertificaat. Ze zijn standaard ingesteld /defaultdir/postgresql.crtop , /defaultdir/postgresql.pk8en /defaultdir/root.crt, respectievelijk, waar defaultdir zich ${user.home}/.postgresql/ in Linux-systemen en %appdata%/postgresql/ in Windows bevindt.

Belangrijk

Sommige Postgres-clientbibliotheken kunnen geen verbinding maken wanneer u de sslmode=verify-full instelling gebruikt met basis-CA-certificaten die tussenliggende certificaten kruislings ondertekenen. Deze configuratie resulteert in alternatieve vertrouwenspaden. Geef in dit geval expliciet de sslrootcert parameter op. Of stel de PGSSLROOTCERT omgevingsvariabele in op een lokaal pad waar het Basis-CA 2017-basiscertificaat van Microsoft RSA wordt geplaatst, van de standaardwaarde van %APPDATA%\postgresql\root.crt.

Vertrouwde basiscertificeringsinstanties (CA's) installeren

Basis-CA-certificaten downloaden en converteren

Voor Windows-clients die gebruikmaken van het systeemcertificaatarchief voor vertrouwde basiscertificaten, is er geen actie vereist omdat Windows nieuwe basis-CA-certificaten implementeert via Windows Update.

Voor Java-clients, de VS Code-extensie en andere clients (bijvoorbeeld PSQLPerl) die geen gebruik maken van het systeemarchief en voor clients in Linux: u moet de basis-CA-certificaten downloaden en combineren in een PEM-bestand. Neem minimaal de volgende basis-CA-certificaten op:

Opmerking

Voor China-regio's en voor klanten met rotatie-extensies: Digicert Global Root CA (pem-bestand) is nog steeds geldig; neem het op in het gecombineerde PEM-bestand.

Neem alle Basis-CA-certificaten van Azure op om de noodzaak van toekomstige updates voor het gecombineerde bestand te verminderen als er wijzigingen zijn in de basis-CA's die worden gebruikt door Azure Database for PostgreSQL. U vindt de lijst met Azure-basis-CA-certificaten op de details van de Azure-certificeringsinstantie.

Als u certificaten wilt importeren in client-certificaatopslag, moet u wellicht CRT-certificaten converteren naar PEM-indeling en de PEM-bestanden samenvoegen tot één bestand. U kunt het hulpprogramma OpenSSL X509 gebruiken om de CRT-bestanden te converteren naar PEM.

openssl x509 -inform DER -in certificate-filename.crt -out certificate-filename.pem -outform PEM

Basis-CA-certificaten combineren in één PEM-bestand

Voor sommige clients voegt u alle PEM-bestanden samen in één bestand met behulp van een teksteditor of opdrachtregelprogramma.

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

Voor China-regio's en voor klanten met rotatieuitbreidingen:

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

Basis-CA-certificaten voor Java-toepassingen combineren en bijwerken

Aangepaste Java-toepassingen maken gebruik van een standaardsleutelarchief met de naam cacerts, dat vertrouwde CA-certificaten (certificate authority) bevat. Het cacerts certificaatbestand bevindt zich in de map met beveiligingseigenschappen op java.home\lib\security, waar java.home zich de map van de runtime-omgeving bevindt (de jre map in de SDK of de map op het hoogste niveau van de Java™ 2 Runtime-omgeving). Als u client root CA-certificaten wilt bijwerken voor scenario's waarbij clientcertificaten aan PostgreSQL worden gekoppeld, volgt u de volgende aanwijzingen:

  1. Controleer het cacerts Java-sleutelarchief om te zien of deze al de vereiste certificaten bevat. U kunt certificaten in het 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, gaat u verder met de volgende instructies:

  2. Maak een back-up van uw aangepaste sleutelarchief.

  3. Download de certificaatbestanden en sla ze lokaal op waar u ernaar kunt verwijzen.

  4. Genereer een gecombineerd CA-certificaatarchief dat alle benodigde basis-CA-certificaten bevat. In het volgende voorbeeld ziet u het gebruik van DefaultJavaSSLFactory voor PostgreSQL Java-gebruikers.

    keytool -importcert -alias PostgreSQLServerCACert  -file "DigiCertGlobalRootG2.crt.pem" -keystore truststore -storepass password -noprompt
    
    keytool -importcert -alias PostgreSQLServerCACert2  -file "Microsoft ECC Root Certificate Authority 2017.crt.pem" -keystore truststore -storepass password  -noprompt
    
    ...
    

Basis-CA-certificaten bijwerken in Azure App Services

Voor Azure App Services die verbinding maken met een exemplaar van een flexibele Azure Database for PostgreSQL-server, zijn er twee mogelijke scenario's voor het bijwerken van clientcertificaten. De scenario's zijn afhankelijk van hoe u SSL gebruikt met uw toepassing die is geïmplementeerd in Azure App Services.

  • Voeg nieuwe certificaten toe aan App Service op platformniveau voordat wijzigingen plaatsvinden in uw flexibele serverexemplaren van Azure Database for PostgreSQL. Als u de SSL-certificaten gebruikt die zijn opgenomen in het App Service-platform in uw toepassing, hoeft u niets te doen. Zie TLS/SSL-certificaten toevoegen en beheren in Azure App Service in de Documentatie van Azure App Service voor meer informatie.
  • Als u expliciet het pad naar een SSL-certificaatbestand in uw code opgeeft, moet u het nieuwe certificaat downloaden en de code bijwerken om het te gebruiken.

Basis-CA-certificaten bijwerken bij het gebruik van clients in Azure Kubernetes Service (AKS)

Als u verbinding probeert te maken met Azure Database for PostgreSQL met behulp van toepassingen die worden gehost in Azure Kubernetes Services (AKS), is dit vergelijkbaar met toegang vanuit de hostomgeving van een toegewezen klant. Zie gedetailleerde instructies in de AKS-documentatie.

Basis-CA-certificaten bijwerken voor .NET-gebruikers inNpgsql Windows

Voor .NET-gebruikers opNpgsql Windows die verbinding maken met Azure Database for PostgreSQL flexibele serverexemplaren, moet u ervoor zorgen dat alle root-CA-certificaten zijn opgenomen in de Windows Certificaatopslag onder Vertrouwde basiscertificeringsinstanties. Windows Update onderhoudt de standaard azure-basis-CA-lijst. Als er certificaten in de aanbevolen configuratie niet zijn opgenomen, importeert u de ontbrekende certificaten.

TLS gebruiken met certificaatvalidatie

Sommige toepassingsframeworks die PostgreSQL voor hun databaseservices gebruiken, schakelen TLS niet standaard in tijdens de installatie. Uw Azure Database for PostgreSQL-exemplaar dwingt TLS-verbindingen af, maar als de toepassing niet is geconfigureerd voor TLS, kan de toepassing mislukken. Raadpleeg de documentatie van uw toepassing voor meer informatie over het inschakelen van TLS-verbindingen.

Verbinding maken met behulp van PSQL

In het volgende voorbeeld ziet u hoe u verbinding maakt met uw server met behulp van de PSQL opdrachtregelinterface. Gebruik de sslmode=verify-full-instelling of sslmode=verify-ca-verbindingsreeksinstelling om controle van TLS-certificaten af te dwingen. Geef het pad naar het lokale certificaatbestand door aan de sslrootcert parameter.

 psql "sslmode=verify-full sslrootcert=<path-of-pem-file> host=mydemoserver.postgres.database.azure.com dbname=postgres user=myadmin"

TLS-connectiviteit testen

Voordat u toegang probeert te krijgen tot uw SERVER met TLS vanuit een clienttoepassing, moet u ervoor zorgen dat u deze kunt openen via PSQL. Als u een TLS-verbinding tot stand hebt gebracht, ziet u uitvoer die vergelijkbaar is met het volgende voorbeeld:

psql (14.5)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

U kunt ook de sslinfo-extensie laden en vervolgens de ssl_is_used() functie aanroepen om te bepalen of TLS wordt gebruikt. De functie retourneert t als de verbinding GEBRUIKMAAKT van TLS. Anders wordt fgeretourneerd.

Programmatisch een lijst met vertrouwde certificaten ophalen in Java Key Store

In Java worden de vertrouwde certificaten standaard opgeslagen in een speciaal bestand met de naam cacerts dat zich in de Java-installatiemap op de client bevindt. In het volgende voorbeeld wordt cacerts gelezen en geladen in een 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 cacerts is changeit, maar moet anders zijn op een echte client. Beheerders raden aan het wachtwoord onmiddellijk na de installatie van Java te wijzigen. Zodra u het KeyStore-object hebt geladen, kunt u 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());
}