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


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

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 Netscape Communications Corp.-ból készült TLS. A Secure Sockets Layer megjelenik, és rendszeresen felváltotta azt, de az SSL vagy AZ SSL/TLS 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, míg 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.

A fenti ábrán a tipikus TLS 1.2 kézfogási sorozat látható, amely a következőkből áll:

  1. Az ügyfél egy ClientHello nevű üzenet küldésével kezdődik, amely lényegében kifejezi a TLS 1.2-en keresztüli kommunikációra való hajlandóságot a titkosítási csomagok ügyfél által támogatott készletével
  2. A kiszolgáló ezt megkapja, és választ ad egy ServerHello-val , amely vállalja, hogy egy adott titkosítási csomag használatával kommunikál az ügyféllel a TLS 1.2-en keresztül
  3. Ezzel együtt a kiszolgáló elküldi a kulcsmegosztást. A kulcsmegosztás jellemzői attól függően változnak, hogy melyik titkosítási csomag lett kiválasztva. Fontos megjegyezni, hogy ahhoz, hogy az ügyfél és a kiszolgáló megállapodjon egy titkosítási kulcsról, meg kell kapniuk egymás részét, vagy meg kell osztaniuk őket.
  4. A kiszolgáló elküldi a tanúsítványt (a hitelesítésszolgáltató által aláírt) és egy aláírást a ClientHello és a ServerHello egyes részeire, beleértve a kulcsmegosztást is, hogy az ügyfél tudja, hogy ezek hitelesek.
  5. Miután az ügyfél sikeresen megkapta a fent említett adatokat, majd létrehozza a saját kulcsmegosztását, összekeveri azokat a kiszolgálókulcs-megosztással, és így létrehozza a munkamenet titkosítási kulcsait.
  6. Az utolsó lépésként az ügyfél elküldi a kiszolgálónak a kulcsmegosztást, engedélyezi a titkosítást, és befejezett üzenetet küld (amely 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 Kész üzenetét.
  7. Ekkor az alkalmazásadatok titkosítva küldhetők a kapcsolaton.

Tanúsítványláncok

A tanúsítványlánc az SSL/TLS-tanúsítvány- és hitelesítésszolgáltatói (CA-) tanúsítványokat tartalmazó tanúsítványok rendezett listája, amely lehetővé teszi 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 az SSL-/TLS-tanúsítvánnyal kezdődik, és 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. A legfelső szintű hitelesítésszolgáltatói tanúsítványt mindig maga a hitelesítésszolgáltató (CA) í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. Az SSL/TLS-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 szervezet tart fenn irányelveket a TLS-hez a hálózatbiztonsággal kapcsolatban, beleértve az Egészségügyi és Emberi Szolgáltatások Minisztériumát (HHS) vagy a Nemzeti Szabványügyi és Technológiai Intézetet (NIST) a Egyesült Államok. 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 algoritmusok készlete, beleértve a titkosítást, a kulcscserélő algoritmust és a kivonatoló algoritmust, amelyeket együtt használnak a biztonságos TLS-kapcsolat létrehozásához. A legtöbb TLS-ügyfél és -kiszolgáló több alternatívát is támogat, ezért a közös TLS-verzió és titkosítási csomag kiválasztásához biztonságos kapcsolat létrehozásakor tárgyalniuk kell.

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 Internet Engineering Task Force (IETF) 2018 augusztusában kiadta a TLS 1.3 specifikációt az RFC 8446-ban, és 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. Ezért 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 szükség esetén nem ajánlott letiltani a TLS\SSL protokollt a rugalmas Azure Database for PostgreSQL-kiszolgálóhoz való csatlakozáshoz, ha a require_secure_transport kiszolgálóparamétert KI értékűre frissíti. A TLS-verziót ssl_min_protocol_version és ssl_max_protocol_version kiszolgálóparaméterek beállításával is beállíthatja.

A tanúsítványhitelesítés SSL-ügyféltanúsítványokkal történik a hitelesítéshez. Ebben az esetben a PostgreSQL-kiszolgáló összehasonlítja a bemutatott ügyféltanúsítvány CN (common name) attribútumát a kért adatbázis-felhasználóval. A rugalmas Azure Database for PostgreSQL-kiszolgáló jelenleg nem támogatja az SSL-tanúsítványalapú hitelesítést.

Feljegyzés

Azure Database for PostgreSQL – A rugalmas kiszolgáló jelenleg nem támogatja az egyéni SSL\TLS-tanúsítványokat .

Feljegyzés

A Microsoft számos Azure-szolgáltatás, köztük a rugalmas Azure Database for PostgreSQL-kiszolgáló fő CA-módosításait is végigvezeti a jelen dokumentumban ismertetett módon , és az SSL konfigurálása az alábbi ügyfélszakaszban.

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 t értéket ad vissza, ha a kapcsolat SSL-t használ, ellenkező esetben f értéket ad vissza. A rugalmas Azure Database for PostgreSQL-kiszolgálópéldány 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 használhatja közvetlenül az Openssl parancsot is, például:

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

Ez a parancs számos alacsony szintű protokollinformációt nyomtat ki, beleértve a TLS-verziót, a titkosítást és így tovább. A -starttls postgres lehetőséget kell használnia, különben 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.

Feljegyzés

A legújabb, legbiztonságosabb TLS-verzió kényszerítése az ügyfél és a rugalmas Azure Database for PostgreSQL-kiszolgáló közötti kapcsolatvédelemhez, ssl_min_protocol_version 1.3-ra. Ehhez a rugalmas Azure Database for PostgreSQL-kiszolgálópéldányhoz csatlakozó ügyfeleknek csak a protokoll ezen verzióját kell használniuk a biztonságos kommunikációhoz. A régebbi ügyfelek azonban, mivel nem támogatják ezt a verziót, előfordulhat, hogy nem tudnak kommunikálni a kiszolgálóval.

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. Ez azt jelenti, hogy a kiszolgálóidentitást meg lehet hamisíteni (például egy DNS-rekord módosításával vagy a kiszolgáló IP-címének átvételével), anélkül, hogy az ügyfél tudná. Minden SSL-beállítás titkosítás és kulcscsere formájában hordoz többletterhelést, ezért a teljesítmény és a biztonság között kompromisszumra van szükség. 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 számunkra:

  1. 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 azonban a "true" (igaz) érték van előnyben. Ebben a módban AZ SSL-kapcsolat létrehozásakor az ügyfélillesztő ellenőrzi a kiszolgáló identitását, és megakadályozza a "középen lévő ember" támadásokat. Ezt úgy teszi, hogy ellenőrzi, hogy a kiszolgálói tanúsítványt egy megbízható szolgáltató írta-e alá, és hogy a csatlakozni kívánt gazdagép megegyezik-e a tanúsítvány állomásnevével.
  2. sslmode. Ha titkosítást igényel, és azt szeretné, hogy a kapcsolat meghiúsuljon, ha az nem titkosítható, állítsa be az sslmode=require értéket. Ez 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. Más szóval, ha a kiszolgáló nem fogadja el az SSL-kapcsolatokat, vagy az ügyféltanúsítvány nem ismeri fel, a kapcsolat meghiúsul. Az alábbi táblázat a beállítás értékeit sorolja fel:
SSL-mód Magyarázat
letiltás A titkosítás nincs használatban
enged Titkosítást használ, ha az f kiszolgáló beállításai megkövetelik\kényszerítik azt
jobban szeret Titkosítást használ, ha a kiszolgáló beállításai engedélyezik
kíván A rendszer titkosítást használ. Ez 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. Emellett ellenőrizze a kiszolgálói tanúsítvány aláírását az ügyfélen tárolt tanúsítványon
ellenőrzés megtelt A rendszer titkosítást használ. Ezenkívü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

A használt alapértelmezett sslmode mód eltér a libpq-alapú ügyfelek (például a psql) és a JDBC között. Alapértelmezés szerint a libpq-alapú ügyfeleket részesíti előnyben, a JDBC-ügyfelek pedig alapértelmezés szerint a teljes ellenőrzést.

  1. 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. Ezek az alapértelmezett értékek a /defaultdir/postgresql.crt, a /defaultdir/postgresql.pk8 és a /defaultdir/root.crt értékek, ahol a defaultdir értéke ${user.home}/.postgresql/ a *nix rendszerekben és %appdata%/postgresql/ windows rendszeren.

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 ki 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.

Feljegyzés

A verify-ca és a verify-full sslmode konfigurációs beállítások használata tanúsítvány-rögzítésnek is nevezhető. Ebben az esetben a PostgreSQL-kiszolgálón a 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őt az ügyfél tanúsítványának gazdanevével is. Fontos megjegyezni, hogy 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ányainál. 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.

Feljegyzés

A verify-ca és a verify-full sslmode konfigurációs beállításokat, azaz a tanúsítvány-rögzítést használó ü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: a DigiCert Global Root G2 és a Microsoft RSA Root Certificate Authority 2017 fő hitelesítésszolgáltatói tanúsítványokat, mivel a szolgáltatások a Digicertből a Microsoft CA-ba migrálódnak. Az örökölt kompatibilitás érdekében a Digicert globális legfelső szintű hitelesítésszolgáltatója.

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 a következő URI-kból tölthet le 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 fenti URI-kból a tanúsítványfájlokat. Az OpenSSL segédprogrammal elvégezheti ezeket a fájlkonverziókat az alábbi példában látható módon:

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

Az ügyfélalkalmazások tanúsítványtárolóinak új legfelső szintű hitelesítésszolgáltatói tanúsítványokkal való frissítésével kapcsolatos részletes információkat ebben az útmutatódokumentumban dokumentálták.

Fontos

Az sslmode=verify-full beállítás használata közben egyes Postgres-ügyfélkódtárak kapcsolódási hibákat tapasztalhatnak a köztes tanúsítványokkal keresztaláírt legfelső szintű hitelesítésszolgáltatói tanúsítványokkal, ami alternatív megbízhatósági útvonalakat eredményez. Ebben az esetben javasoljuk, hogy explicit módon adja meg az sslrootcert paramétert a fent ismertetett módon, vagy állítsa a PGSSLROOTCERT környezeti változót olyan helyi elérési útra, ahol a Microsoft RSA főtanúsítvány-hitelesítésszolgáltató 2017-es főtanúsítvány van elhelyezve, a következő 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 főtanúsítvány-szolgáltatóra történő áttelepítésével 2017-ben megvalósítható, hogy az újonnan létrehozott replikák egy újabb legfelső szintű hitelesítésszolgáltatói tanúsítványon legyenek, mint a korábban létrehozott elsődleges kiszolgálón. Ezért a verify-ca és a verify-full sslmode konfigurációs beállításokat, azaz a tanúsítvány-rögzítést használó ügyfelek esetében elengedhetetlen, hogy a kapcsolat megszakadjon három fő hitelesítésszolgáltatói tanúsítvány elfogadásához:

Feljegyzés

Azure Database for PostgreSQL – A rugalmas 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 psql parancssorával tesztelheti a kiszolgálóhoz való kapcsolódást a tanúsítvány-rögzítési forgatókönyvekben, ahogyan az alábbi példában látható:


$ 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 .

SSL-/TLS-kapcsolat tesztelése

Mielőtt megpróbálná elérni az SSL-kompatibilis kiszolgálót az ügyfélalkalmazásból, győződjön meg arról, hogy a psql-en keresztül érheti el. Ssl-kapcsolat létesítése esetén az alábbihoz 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".

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

Titkosítási 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ócsomagok látszólag véletlenszerű információk hosszú sztringjeként jelennek meg, de a sztring minden szegmense alapvető információkat tartalmaz. Ez az adatsztring általában több fő összetevőből áll:

  • 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)

Az SSL/TLS 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, MAGAS:!aNULL kategóriába tartozó TLS 1.2 protokollverziójú titkosítási csomagot támogat.

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

  1. Az SSL/TLS 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ál hozzáférni az Azure Database for PostgreSQL - Rugalmas 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, de sok esetben a mögöttes problémára mutatnak.
  2. Az SSL/TLS protokoll verziókompatibilitásának biztosításához ellenőrizze az adatbázis-kiszolgáló és az alkalmazásügyfél SSL-/TLS-konfigurációját, hogy azok támogatják-e a kompatibilis verziókat és a titkosítási csomagokat.
  3. Elemezze az adatbázis-kiszolgáló és az ügyfél SSL/TLS-verziói és titkosítási csomagjai közötti eltéréseket vagy hiányosságokat, és próbálja meg feloldani őket bizonyos lehetőségek 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 bizonyos SSL/TLS-verziókat kell engedélyeznie vagy letiltania a kiszolgálón vagy az ügyfélen a biztonsági és kompatibilitási követelményektől függően – ilyen például a nem biztonságosnak és elavultnak ítélt TLS 1.0 és TLS 1.1 letiltása, valamint a biztonságosabb és modernebb TLS 1.2 és TLS 1.3 engedélyezése.
  4. A Microsoft RSA Főtanúsítvány-szolgáltatónál 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 az sslmode=verify-full vagy sslmode=verify-ca beállítások használata közben kapcsolódási hibákat tapasztalhatnak a köztes tanúsítványokkal keresztaláírt legfelső szintű hitelesítésszolgáltatói tanúsítványokkal, amelyek alternatív megbízhatósági útvonalakat eredményeznek. 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 az sslrootcert paramétert a fent ismertetett módon, vagy állítsa a PGSSLROOTCERT környezeti változót a microsoft RSA főtanúsítvány-szolgáltató 2017-es főtanúsítványának helyi elérési útjára a %APPDATA%\postgresql\root.crt alapértelmezett értékről.
  • Megtudhatja, hogyan hozhat létre rugalmas Azure Database for PostgreSQL-kiszolgálópéldányt az Azure Portalon vagy az Azure CLI-ben található Privát hozzáférés (VNet-integráció) lehetőséggel.
  • Megtudhatja, hogyan hozhat létre rugalmas Azure Database for PostgreSQL-kiszolgálópéldányt az Azure Portalon vagy az Azure CLI-ben elérhető Nyilvános hozzáférés (engedélyezett IP-címek) beállítással.