Megosztás a következőn keresztül:


Biztonságos kapcsolat TLS és SSL használatával a rugalmas Azure Database for PostgreSQL-kiszolgálón

A következőkre vonatkozik: Azure Database for PostgreSQL – Rugalmas kiszolgáló

A rugalmas Azure Database for PostgreSQL-kiszolgáló a Transport Layer Security (TLS) használatával kényszeríti az ügyfélalkalmazások rugalmas Azure Database for PostgreSQL-kiszolgálóhoz való csatlakoztatását. A TLS egy iparági szabvány protokoll, amely titkosított hálózati kapcsolatokat biztosít az adatbázis-kiszolgáló és az ügyfélalkalmazások között. A TLS a Secure Sockets Layer (SSL) frissített protokollja.

Mi az a TLS?

A TLS a Netscape SSL protokolljából készült, és rendszeresen lecserélte. Az SSL vagy a TLS/SSL kifejezéseket még mindig gyakran használják felcserélhetően. A TLS két rétegből áll: a TLS rekordbemutatóból és a TLS kézfogási show-ból. A rekordbemutató a társítás biztonságát biztosítja. A kézfogási show lehetővé teszi a kiszolgáló és az ügyfél számára, hogy megerősítse egymást, és koordinálja a titkosítási értékeléseket és a titkosítási kulcsokat az információk kereskedelme előtt.

A tipikus TLS 1.2 kézfogási sorozatot bemutató ábra.

Az előző ábrán egy tipikus TLS 1.2 kézfogási sorozat látható, amely a következő lépésekből áll:

  1. Az ügyfél egy olyan ClientHello üzenet küldésével kezdődik, amely kifejezi a TLS 1.2-en keresztüli kommunikációra való hajlandóságot az ügyfél által támogatott titkosítási csomagokkal.
  2. A kiszolgáló megkapja az üzenetet, válaszol ServerHello, és beleegyezik abba, hogy tLS 1.2-en keresztül kommunikáljon az ügyféllel egy adott titkosítási csomag használatával.
  3. A kiszolgáló elküldi a kulcsmegosztást is. A kulcsmegosztás jellemzői a kiválasztott titkosítási csomag alapján változnak. Ahhoz, hogy az ügyfél és a kiszolgáló megállapodjon egy titkosítási kulcsban, meg kell kapniuk egymás részét vagy megosztását.
  4. A kiszolgáló elküldi a tanúsítványt (a hitelesítésszolgáltató [CA] által aláírt) és egy aláírást a következő részeken ClientHello : és ServerHello. A kulcsmegosztást is tartalmazza. Így az ügyfél tudja, hogy hitelesek.
  5. Miután az ügyfél sikeresen megkapta az adatokat, majd létrehozta a saját kulcsmegosztását, összekeveri azokat a kiszolgálókulcs-megosztással, hogy titkosítási kulcsokat hozzon létre a munkamenethez.
  6. Az ügyfél elküldi a kiszolgálónak a kulcsmegosztást, engedélyezi a titkosítást Finished , és üzenetet küld. Ez az üzenet az eddigi események átiratának kivonata. A kiszolgáló ugyanezt teszi. Összekeveri a kulcsmegosztásokat a kulcs lekéréséhez, és elküldi a saját Finished üzenetét.
  7. Mostantól az alkalmazásadatok titkosítva is elküldhetők a kapcsolaton.

Tanúsítványláncok

A tanúsítványlánc a TLS-/SSL-tanúsítványt és CA-tanúsítványokat tartalmazó tanúsítványok rendezett listája. Lehetővé teszik a fogadó számára, hogy ellenőrizze, hogy a feladó és az összes hitelesítésszolgáltató megbízható-e. A lánc vagy elérési út a TLS/SSL-tanúsítvánnyal kezdődik. A lánc minden tanúsítványát a lánc következő tanúsítványa által azonosított entitás írja alá.

A lánc egy legfelső szintű hitelesítésszolgáltatói tanúsítvánnyal végződik. Ezt a tanúsítványt mindig maga a hitelesítésszolgáltató írja alá. A lánc összes tanúsítványának aláírását a legfelső szintű hitelesítésszolgáltatói tanúsítványig ellenőrizni kell.

A TLS/SSL-tanúsítvány és a láncban lévő legfelső szintű hitelesítésszolgáltatói tanúsítvány között található tanúsítványokat köztes tanúsítványnak nevezzük.

TLS-verziók

Világszerte számos kormányzati entitás tart fenn irányelveket a TLS-hez a hálózatbiztonsággal kapcsolatban. A Egyesült Államok ezek a szervezetek közé tartozik az Egészségügyi és Humán Szolgáltatások Minisztériuma, valamint a Nemzeti Szabványügyi és Technológiai Intézet. A TLS által biztosított biztonsági szintet leginkább a TLS protokoll verziója és a támogatott titkosítási csomagok befolyásolják.

A titkosítási csomag olyan algoritmusok készlete, amelyek tartalmazzák a titkosítást, a kulcscserélő algoritmust és a kivonatoló algoritmust. Ezek együttes használatával biztonságos TLS-kapcsolatot hozhat létre. A legtöbb TLS-ügyfél és -kiszolgáló több alternatívát is támogat. Egyeztetniük kell, amikor biztonságos kapcsolatot létesítenek egy közös TLS-verzió és titkosítási csomag kiválasztásához.

Az Azure Database for PostgreSQL támogatja a TLS 1.2-es és újabb verzióját. Az RFC 8996-ban az Internet Engineering Task Force (IETF) kifejezetten kimondja, hogy a TLS 1.0 és a TLS 1.1 nem használható. 2019 végéig mindkét protokoll elavult.

A TLS protokoll korábbi verzióit ( például TLS 1.0 és TLS 1.1) használó bejövő kapcsolatok alapértelmezés szerint le vannak tagadva.

Az IETF 2018 augusztusában adta ki a TLS 1.3 specifikációt az RFC 8446-ban, és a TLS 1.3 jelenleg a leggyakrabban használt és ajánlott TLS-verzió. A TLS 1.3 gyorsabb és biztonságosabb, mint a TLS 1.2.

Feljegyzés

Az SSL- és TLS-tanúsítványok tanúsítják, hogy a kapcsolat a legkorszerűbb titkosítási protokollokkal van biztosítva. A vezetéken lévő kapcsolat titkosításával megakadályozza az adatokhoz való jogosulatlan hozzáférést átvitel közben. Határozottan javasoljuk, hogy a TLS legújabb verzióival titkosítsa a rugalmas Azure Database for PostgreSQL-kiszolgálóval létesített kapcsolatokat.

Bár nem javasoljuk, ha szükséges, letilthatja a TLS\SSL-t a rugalmas Azure Database for PostgreSQL-kiszolgálóval való kapcsolatokhoz. A kiszolgálóparamétert frissítheti a require_secure_transport következőre OFF: . A TLS-verziót a kiszolgáló paramétereinek beállításával ssl_min_protocol_versionssl_max_protocol_version is beállíthatja.

A tanúsítványhitelesítés ssl-ügyféltanúsítványok használatával történik a hitelesítéshez. Ebben a forgatókönyvben a PostgreSQL-kiszolgáló összehasonlítja a kért adatbázis-felhasználóval bemutatott ügyféltanúsítvány köznapi (CN) attribútumát.

A rugalmas Azure Database for PostgreSQL-kiszolgáló jelenleg nem támogatja a következőt:

Feljegyzés

A Microsoft alapvető ca-módosításokat hajtott végre a különböző Azure-szolgáltatásokhoz, például a rugalmas Azure Database for PostgreSQL-kiszolgálóhoz. További információkért tekintse meg az Azure TLS-tanúsítvány módosításait és az SSL konfigurálása az ügyfélen című szakaszt.

Az aktuális TLS\SSL-kapcsolat állapotának meghatározásához töltse be a sslinfo bővítményt , majd hívja meg a függvényt annak ssl_is_used() megállapításához, hogy használ-e SSL-t. A függvény akkor ad t vissza, ha a kapcsolat SSL-t használ. Ellenkező esetben a visszaadott férték. A rugalmas Azure Database for PostgreSQL-kiszolgáló SSL-használatára vonatkozó összes információt folyamat, ügyfél és alkalmazás szerint is összegyűjtheti az alábbi lekérdezéssel:

SELECT datname as "Database name", usename as "User name", ssl, client_addr, application_name, backend_type
   FROM pg_stat_ssl
   JOIN pg_stat_activity
   ON pg_stat_ssl.pid = pg_stat_activity.pid
   ORDER BY ssl;

A teszteléshez közvetlenül is használhatja a openssl parancsot:

openssl s_client -starttls postgres -showcerts -connect <your-postgresql-server-name>:5432

Ez a parancs alacsony szintű protokolladatokat nyomtat ki, például a TLS-verziót és a titkosítást. Ezt a lehetőséget -starttls postgreskell használnia. Ellenkező esetben ez a parancs azt jelenti, hogy nincs SSL használatban. A parancs használatához legalább az OpenSSL 1.1.1 szükséges.

Az ügyfél és a rugalmas Azure Database for PostgreSQL-kiszolgáló közötti kapcsolatvédelem érdekében a legújabb, legbiztonságosabb TLS-verzió kényszerítése szükséges, állítsa be a ssl_min_protocol_version1.3 értékre. Ehhez a beállításhoz a rugalmas Azure Database for PostgreSQL-kiszolgálóhoz csatlakozó ügyfeleknek csak a protokoll ezen verzióját kell használniuk a biztonságos kommunikációhoz. Előfordulhat, hogy a régebbi ügyfelek nem tudnak kommunikálni a kiszolgálóval, mert nem támogatják ezt a verziót.

SSL konfigurálása az ügyfélen

Alapértelmezés szerint a PostgreSQL nem végzi el a kiszolgálótanúsítvány ellenőrzését. Emiatt a kiszolgálóidentitást (például egy DNS-rekord módosításával vagy a kiszolgáló IP-címének átvételével) az ügyfél tudta nélkül is meg lehet hamisíteni. Minden SSL-beállítás a terhelést titkosítás és kulcscsere formájában hordozzák, így a teljesítmény és a biztonság közötti kompromisszum jön létre.

A hamisítás megakadályozása érdekében SSL-tanúsítvány-ellenőrzést kell használni az ügyfélen.

Az ügyfél SSL-hez való konfigurálásához számos kapcsolati paraméter létezik. Néhány fontos:

  • ssl: Csatlakozás SSL használatával. Ennek a tulajdonságnak nincs szüksége hozzá társított értékre. A puszta jelenléte SSL-kapcsolatot határoz meg. A jövőbeli verziókkal való kompatibilitás érdekében előnyben részesítjük az értéket true . Ebben a módban, amikor SSL-kapcsolatot hoz létre, az ügyfélillesztő ellenőrzi a kiszolgáló identitását, hogy megelőzze a középen belüli támadásokat. Ellenőrzi, hogy a kiszolgálótanúsítványt egy megbízható szolgáltató írta-e alá, és hogy az állomás, amelyhez csatlakozik, megegyezik-e a tanúsítvány állomásnevével.

  • sslmode: Ha titkosítást igényel, és azt szeretné, hogy a kapcsolat sikertelen legyen, ha nem lehet titkosítani, állítsa be a .sslmode=require Ez a beállítás biztosítja, hogy a kiszolgáló ssl-kapcsolatokat fogadjon el ehhez a gazdagéphez/IP-címhez, és hogy a kiszolgáló felismerje az ügyféltanúsítványt. Ha a kiszolgáló nem fogadja el az SSL-kapcsolatokat, vagy nem ismeri fel az ügyféltanúsítványt, a kapcsolat meghiúsul. Az alábbi táblázat a beállítás értékeit sorolja fel:

    SSL-mód Magyarázat
    disable A rendszer nem használ titkosítást.
    allow A titkosítást akkor használja a rendszer, ha a kiszolgáló beállításai megkövetelik vagy kényszerítik.
    prefer A titkosítást akkor használja a rendszer, ha a kiszolgáló beállításai engedélyezik.
    require A rendszer titkosítást használ. Biztosítja, hogy a kiszolgáló ssl-kapcsolatokat fogadjon el ehhez a gazdagép IP-címhez, és hogy a kiszolgáló felismerje az ügyféltanúsítványt.
    verify-ca A rendszer titkosítást használ. Ellenőrizze a kiszolgálótanúsítvány aláírását az ügyfélen tárolt tanúsítványon.
    verify-full A rendszer titkosítást használ. Ellenőrizze a kiszolgálótanúsítvány aláírását és a gazdagép nevét az ügyfélen tárolt tanúsítványon.

    Az alapértelmezett sslmode mód eltér a libpq-alapú ügyfelek (például a psql) és a JDBC között. A libpq-alapú ügyfelek alapértelmezés szerint a prefer. A JDBC-ügyfelek alapértelmezés szerint a .verify-full

  • sslcert, sslkeyés sslrootcert: Ezek a paraméterek felülbírálhatják az ügyféltanúsítvány alapértelmezett helyét, a PKCS-8 ügyfélkulcsot és a főtanúsítványt. Alapértelmezés szerint az /defaultdir/postgresql.crt/defaultdir/postgresql.pk8nix-rendszerekben /defaultdir/root.crt és defaultdira Windowsban a , illetve a hol ${user.home}/.postgresql/ található%appdata%/postgresql/.

A hitelesítésszolgáltatók a tanúsítványok kiállításáért felelős intézmények. A megbízható hitelesítésszolgáltató olyan entitás, amely jogosult ellenőrizni, hogy valaki az, akinek mondja magát. Ahhoz, hogy ez a modell működjön, minden résztvevőnek meg kell egyeznie a megbízható hitelesítésszolgáltatók készletében. Az összes operációs rendszer és a legtöbb webböngésző megbízható hitelesítésszolgáltatókkal rendelkezik.

A használati verify-ca és verify-fullsslmode konfigurációs beállításokat tanúsítvány-rögzítésnek is nevezhetjük. Ebben az esetben a PostgreSQL-kiszolgálón lévő legfelső szintű hitelesítésszolgáltatói tanúsítványoknak meg kell egyezniük a tanúsítvány aláírásával és még a gazdagép nevével is az ügyfél tanúsítványával.

Előfordulhat, hogy időnként frissítenie kell az ügyfél által tárolt tanúsítványokat, amikor a hitelesítésszolgáltatók módosítják vagy lejárnak a PostgreSQL-kiszolgálótanúsítványokon. Annak megállapításához, hogy a hitelesítésszolgáltatókat rögzíti-e, tekintse meg a tanúsítvány-rögzítést és az Azure-szolgáltatásokat.

Az ügyfél SSL\TLS-konfigurációjáról további információt a PostgreSQL dokumentációjában talál.

A tanúsítványt használó és verify-caverify-full konfigurációs beállításokat (azaz tanúsítványrögzítést) használó sslmode ügyfeleknek három fő hitelesítésszolgáltatói tanúsítványt kell üzembe helyezniük az ügyféltanúsítvány-tárolókban:

Fő hitelesítésszolgáltatói tanúsítványok letöltése és az alkalmazás-ügyfelek frissítése tanúsítvány-rögzítési forgatókönyvekben

Az ügyfélalkalmazások tanúsítvány-rögzítési forgatókönyvekben való frissítéséhez letöltheti a tanúsítványokat:

Ha tanúsítványokat szeretne importálni az ügyféltanúsítvány-tárolókba, előfordulhat, hogy .pem formátumúra kell konvertálnia a tanúsítványfájlokat, miután letöltötte a tanúsítványfájlokat az előző URI-kból. Az OpenSSL segédprogrammal elvégezheti ezeket a fájlkonverziókat:

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

Az ügyfélalkalmazások tanúsítványtárolóinak új fő hitelesítésszolgáltatói tanúsítványokkal való frissítésével kapcsolatos információk az alkalmazásügyfelek TLS-tanúsítványainak frissítésében találhatók.

Fontos

Egyes Postgres-ügyfélkódtárak a sslmode=verify-full beállítás használata során csatlakozási hibákat tapasztalhatnak a köztes tanúsítványokkal keresztaláírt legfelső szintű hitelesítésszolgáltatói tanúsítványokkal. Az eredmény alternatív megbízhatósági útvonalak. Ebben az esetben javasoljuk, hogy explicit módon adja meg a paramétert sslrootcert . Vagy állítsa be a PGSSLROOTCERT környezeti változót egy helyi elérési útra, ahol a Microsoft RSA Root CA 2017 fő ca-tanúsítvány található az alapértelmezett értékről %APPDATA%\postgresql\root.crt.

Replikák olvasása tanúsítvány-rögzítési forgatókönyvekkel

A legfelső szintű hitelesítésszolgáltató Microsoft RSA Root CA 2017-be való migrálásával megvalósítható, hogy az újonnan létrehozott replikák a korábban létrehozott elsődleges kiszolgálónál újabb legfelső szintű hitelesítésszolgáltatói tanúsítványon legyenek. Azokat az ügyfeleket, amelyek a konfigurációs beállításokat (azaz a tanúsítvány rögzítését) használják verify-caverify-fullsslmode , elengedhetetlen, hogy a megszakadt kapcsolat három fő hitelesítésszolgáltatói tanúsítványt fogadjon el:

A rugalmas Azure Database for PostgreSQL-kiszolgáló jelenleg nem támogatja a tanúsítványalapú hitelesítést.

Ügyféltanúsítványok tesztelése a psql-hez való csatlakozással a tanúsítvány-rögzítési forgatókönyvekben

Az ügyfél parancssorával psql tesztelheti a kiszolgálóhoz való kapcsolódást a tanúsítvány-rögzítési forgatókönyvekben:


$ psql "host=hostname.postgres.database.azure.com port=5432 user=myuser dbname=mydatabase sslmode=verify-full sslcert=client.crt sslkey=client.key sslrootcert=ca.crt"

Az SSL- és tanúsítványparaméterekről további információt a psql dokumentációjában talál.

TLS/SSL-kapcsolat tesztelése

Mielőtt megpróbálná elérni az SSL-kompatibilis kiszolgálót egy ügyfélalkalmazásból, győződjön meg arról, hogy a psql-en keresztül érheti el. Ha SSL-kapcsolatot létesített, az alábbi példához hasonló kimenetnek kell megjelennie:

psql (14.5)SSL-kapcsolat (protokoll: TLSv1.2, titkosítás: ECDHE-RSA-AES256-GCM-SHA384, bitek: 256, tömörítés: kikapcsolva)A súgóhoz írja be a "súgót".

Betöltheti a sslinfo bővítményt is, majd meghívhatja a ssl_is_used() függvényt annak megállapításához, hogy használ-e SSL-t. A függvény akkor ad t vissza, ha a kapcsolat SSL-t használ. Ellenkező esetben a visszaadott férték.

Titkosítócsomagok

A titkosítási csomag titkosítási algoritmusok készlete. A TLS-/SSL-protokollok a titkosítási csomagból származó algoritmusokat használnak kulcsok létrehozásához és az információk titkosításához.

A titkosítási csomag látszólag véletlenszerű információk hosszú sztringjeként jelenik meg, de a sztring minden szegmense alapvető információkat tartalmaz. Ez az adatsztring általában több fő összetevőt tartalmaz:

  • Protokoll (azaz TLS 1.2 vagy TLS 1.3)
  • Kulcscsere- vagy szerződés-algoritmus
  • Digitális aláírási (hitelesítési) algoritmus
  • Tömeges titkosítási algoritmus
  • Üzenethitelesítési kód algoritmusa (MAC)

A TLS/SSL különböző verziói különböző titkosítási csomagokat támogatnak. A TLS 1.2 titkosítási csomagjai nem tárgyalhatók meg TLS 1.3-kapcsolatokkal, és fordítva.

A rugalmas Azure Database for PostgreSQL-kiszolgáló jelenleg számos titkosítási csomagot támogat a HIGH:!aNULL kategóriába tartozó TLS 1.2 protokollverzióval.

TLS-/SSL-csatlakozási hibák elhárítása

  1. A TLS/SSL protokoll verziókompatibilitásának hibaelhárításának első lépése az, hogy azonosítja azokat a hibaüzeneteket, amelyeket Ön vagy a felhasználók látnak, amikor megpróbálnak hozzáférni a rugalmas Azure Database for PostgreSQL-kiszolgálóhoz az ügyfél TLS-titkosítása alatt. Az alkalmazástól és a platformtól függően a hibaüzenetek eltérőek lehetnek. Sok esetben a mögöttes problémára mutatnak.

  2. A TLS/SSL protokoll verziókompatibilitásának biztosításához ellenőrizze az adatbázis-kiszolgáló és az alkalmazásügyfél TLS/SSL-konfigurációját, és győződjön meg arról, hogy támogatják a kompatibilis verziókat és titkosítási csomagokat.

  3. Elemezze az adatbázis-kiszolgáló és az ügyfél TLS/SSL-verziói és titkosítási csomagjai közötti eltéréseket vagy hiányosságokat. Próbálja meg feloldani őket bizonyos beállítások engedélyezésével vagy letiltásával, a szoftverek frissítésével vagy leminősítésével, illetve a tanúsítványok vagy kulcsok módosításával. Előfordulhat például, hogy a biztonsági és kompatibilitási követelményektől függően engedélyeznie vagy le kell tiltania bizonyos TLS/SSL-verziókat a kiszolgálón vagy az ügyfélen. Előfordulhat például, hogy le kell tiltania a nem biztonságosnak és elavultnak ítélt TLS 1.0-s és TLS 1.1-et, és engedélyeznie kell a TLS 1.2-t és a TLS 1.3-at, amelyek biztonságosabbak és modernebbek.

  4. A Microsoft RSA Root CA 2017-ben kiadott legújabb tanúsítvány köztes a Digicert Global Root G2 CA által aláírt láncban. Egyes Postgres-ügyfélkódtárak használata sslmode=verify-full vagy sslmode=verify-ca beállításai között kapcsolati hibák léphetnek fel a köztes tanúsítványokkal keresztaláírt legfelső szintű hitelesítésszolgáltatói tanúsítványokkal. Az eredmény alternatív megbízhatósági útvonalak.

    A problémák megoldásához adja hozzá mindhárom szükséges tanúsítványt az ügyféltanúsítvány-tárolóhoz, vagy explicit módon adja meg a paramétert sslrootcert . Vagy állítsa a PGSSLROOTCERT környezeti változót arra a helyi elérési útra, ahol a Microsoft RSA Root CA 2017 fő CA-tanúsítvány található az alapértelmezett értékről %APPDATA%\postgresql\root.crt.

  • Megtudhatja, hogyan hozhat létre rugalmas Azure Database for PostgreSQL-kiszolgálót a Privát hozzáférés (VNet-integráció) lehetőséggel az Azure Portalon vagy az Azure CLI-ben.
  • Megtudhatja, hogyan hozhat létre rugalmas Azure Database for PostgreSQL-kiszolgálót az Azure Portalon vagy az Azure CLI-ben elérhető Nyilvános hozzáférés (engedélyezett IP-címek) lehetőséggel.