Titkosítás és TLS mssql-pythonnal

Az mssql-python illezőprogram támogatja a titkosított kapcsolatokat a Transport Layer Security (TLS) segítségével. A titkosítás védi az adatokat az alkalmazásod és az SQL Server közötti átvitel során, és megakadályozza a lehallgatást és a középen belüli támadásokat.

Kapcsolattitkosítás

Titkosítás engedélyezése

Használd a Encrypt kulcsszót a kapcsolat titkosításának vezérléséhez:

import mssql_python

# Require encryption (recommended)
conn = mssql_python.connect(
    "Server=<server>.database.windows.net;"
    "Database=<database>;"
    "Authentication=ActiveDirectoryDefault;"
    "Encrypt=yes;"
)

Kulcsszóértékek titkosítása

Érték Leírás
yes Titkosítást igényel, és akkor hibázik, ha a szerver nem támogatja a TLS-t.
no Nem titkosítja a kapcsolatot. Nem javasolt éles környezetben történő használatra.
strict TDS 8.0 szigorú titkosítási módot használ. SQL Server 2022 vagy újabb verziót igényel.

Important

Az Azure SQL Database megköveteli a következőt: Encrypt=yes. Titkosítás nélküli kapcsolatokat elutasítják.

Tanúsítvány érvényesítése

MegbízhatóSzerverTanúsítvány

Szabályozza, hogy az illesztőprogram érvényesíti-e a szerver TLS tanúsítványát:

# Validate server certificate (recommended for production)
conn = mssql_python.connect(
    "Server=<server>.database.windows.net;"
    "Database=<database>;"
    "Encrypt=yes;"
    "TrustServerCertificate=no;"
)

# Skip certificate validation (development only)
conn = mssql_python.connect(
    "Server=<server>;"
    "Database=<database>;"
    "Authentication=ActiveDirectoryDefault;"
    "Encrypt=yes;"
    "TrustServerCertificate=yes;"
)
Érték Leírás
no A tanúsítványt megbízható CA-kkal szemben érvényesíti. Ez az érték az alapértelmezett és ajánlott beállítás.
yes Megbízik bármilyen tanúsítványban, és kihagyja az ellenőrzést. Ez a beállítás bizonytalan.

Caution

A TrustServerCertificate=yes gyártásba állítás lehetővé teszi az alkalmazásodat a középpontban lévő ellenfél támadásainak is. Ezt a beállítást csak önalázott tanúsítványokkal való fejlesztéshez használd.

TDS 8.0 szigorú titkosítás

Az SQL Server 2022 és újabb verziók támogatják a TDS 8.0-t szigorú titkosítási móddal:

conn = mssql_python.connect(
    "Server=<server>.database.windows.net;"
    "Database=<database>;"
    "Encrypt=strict;"
)

A szigorú mód biztosítja a legmagasabb biztonsági szintet:

  • A sofőr a TLS-t minden TDS kézfogás előtt állítja be.
  • Tanúsítvány ellenőrzése szükséges, és nem használhatod TrustServerCertificate=yes.
  • Ez a mód a legmagasabb szintű védelmet nyújtja az elfogás ellen.

HostNévATanúsítványban

Ha a szerver tanúsítvány neve nem egyezik meg a kapcsolati szerver nevével:

conn = mssql_python.connect(
    "Server=192.168.1.100;"  # IP address
    "Database=<database>;"
    "Encrypt=yes;"
    "TrustServerCertificate=no;"
    "HostNameInCertificate=<server>.contoso.com;"  # Certificate CN
)

Ez a kulcsszó akkor hasznos, ha:

  • Az alkalmazásod IP-címen keresztül csatlakozik a gépnév helyett.
  • A szerver egy terheléselosztó mögött van.
  • A tanúsítvány más tárgynevet használ, mint a kapcsolatszerver neve.

Azure SQL Database

Az Azure SQL Database titkosítást igényel:

conn = mssql_python.connect(
    "Server=<server>.database.windows.net;"
    "Database=<database>;"
    "Authentication=ActiveDirectoryDefault;"
    "Encrypt=yes;"
    "TrustServerCertificate=no;"
)

Helyszíni SQL Server (éles)

On-premises SQL Server esetén, amelynek CA-aláírt tanúsítványa van, tartsuk TrustServerCertificate=no úgy, hogy az illesztőprogram érvényesítse a szerver identitását:

conn = mssql_python.connect(
    "Server=<server>;"
    "Database=<database>;"
    "Authentication=ActiveDirectoryDefault;"
    "Encrypt=yes;"
    "TrustServerCertificate=no;"
)

Önaláíró tanúsítványokkal való fejlesztés

Fejlesztés során önaláírt tanúsítványok használatakor állítsa be a TrustServerCertificate=yes értéket a tanúsítvány ellenőrzésének kihagyásához:

conn = mssql_python.connect(
    "Server=localhost;"
    "Database=<database>;"
    "Authentication=ActiveDirectoryDefault;"
    "Encrypt=yes;"
    "TrustServerCertificate=yes;"
)

SQL Server 2022 és újabb verziók szigorú móddal

Használd Encrypt=strict TDS 8.0-t, amely az egész kapcsolatot TLS-be csomagolja az elejétől fogva:

conn = mssql_python.connect(
    "Server=<server>;"
    "Database=<database>;"
    "Encrypt=strict;"
)

Hibaelhárítás

"SSL szolgáltató: tanúsítvány ellenőrzési hiba"

A szerver tanúsítványt nem lehetett ellenőrizni. Végezze le ezeket az ellenőrzéseket:

  • Ellenőrizd, hogy a tanúsítvány megbízható CA-tól származik.
  • Ellenőrizd, hogy a tanúsítvány lejárati dátuma érvényes-e.
  • Ellenőrizd, hogy a szerver hosztneve egyezik-e a CN vagy SAN tanúsítványsal.
  • Fejlesztéshez használja a következőt TrustServerCertificate=yes: .

"TCP szolgáltató: Egy meglévő kapcsolatot erőszakkal lezártak"

A szerver titkosítást igényelhet, de az ügyfél nem kérte. Próbálkozzon az alábbi lépésekkel:

  • Adja hozzá a(z) Encrypt=yes elemet a kapcsolódási sztringhez.
  • Nézd meg az SQL Server konfigurációját a Force Encryption beállítás miatt.

"A tanúsítványláncot egy nem megbízható hatóság adta ki"

A tanúsítvány gyökér CA-ja nincs a rendszer megbízható gyökértárolójában. Végezze le ezeket az ellenőrzéseket:

  • Telepítse a CA tanúsítványt a megbízható gyökérraktárba.
  • Azure SQL esetén győződj meg róla, hogy a rendszered megbízik a Microsoft CA tanúsítványaiban.
  • Fejlesztéshez használja a következőt TrustServerCertificate=yes: .

A kapcsolat meghibásodik szigorú titkosítással

A TDS 8.0 szigorú mód a következő követelményeket tartalmazza:

  • A szervernek SQL Server 2022 vagy újabb verziót kell futtatnia.
  • A szervernek érvényes, megbízható tanúsítványsal kell rendelkeznie.
  • Nem lehet beállítani TrustServerCertificate=yes.

Ha a szerver nem támogatja a TDS 8.0-t, használd Encrypt=yes helyette.