mssql-python ile şifreleme ve TLS

mssql-python sürücüsü, Taşıma Katmanı Güvenliği (TLS) üzerinden şifrelenmiş bağlantıları destekler. Şifreleme, uygulamanız ile SQL Server arasında aktarılan verileri korur ve dinleme ile ortada düşman saldırılarını engeller.

Bağlantı şifrelemesi

Şifrelemeyi etkinleştirme

Bağlantı şifrelemesini kontrol etmek için anahtar kelimeyi Encrypt kullanın:

import mssql_python

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

Anahtar kelime değerlerini şifrele

Değer Açıklama
yes Şifreleme gerektiriyor ve sunucu TLS desteklemiyorsa başarısız oluyor.
no Bağlantıyı şifrelemiyor. Üretim için önerilmez.
strict TDS 8.0 sıkı şifreleme modu kullanır. SQL Server 2022 veya daha yeni bir yazılım gerektirir.

Important

Azure SQL Veritabanı, Encrypt=yes gerektirir. Şifrelemesiz bağlantılar reddedilir.

Sertifika doğrulama

TrustServerCertificate

Sürücünün sunucunun TLS sertifikasını doğrulayıp doğrulamadığını kontrol eder:

# 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;"
)
Değer Açıklama
no Sertifikayı güvenilir CA'lara karşı doğrular. Bu değer varsayılan ve önerilen ayardır.
yes Herhangi bir sertifikaya güvenir ve doğrulamayı atlar. Bu ayar güvensiz bir durum.

Caution

TrustServerCertificate=yes ayarını üretim ortamında kullanmak, uygulamanızı araya giren saldırgan saldırılarına maruz bırakır. Bu ayarı sadece kendi kendine imzalanmış sertifikalarla geliştirme için kullanın.

TDS 8.0 sıkı şifreleme

SQL Server 2022 ve sonrakı sürümler, katı şifreleme moduyla TDS 8.0'ı destekler:

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

Sıkı mod en yüksek güvenlik seviyesini sağlar:

  • Sürücü, herhangi bir TDS el sıkışmadan önce TLS kurar.
  • Sertifika doğrulaması gereklidir ve TrustServerCertificate=yes kullanamazsınız.
  • Bu mod, yakalamaya karşı en yüksek koruma seviyesini sağlar.

SertifikadakiHostAdı (HostNameInCertificate)

Sunucunun sertifika adı bağlantı sunucusu adıyla eşleşmediğinde:

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

Bu anahtar kelime şu durumlarda faydalıdır:

  • Uygulamanız, host adı yerine IP adresi üzerinden bağlanır.
  • Sunucu bir yük dengeleyicinin arkasında bulunuyor.
  • Sertifika, bağlantı sunucusu adından farklı bir konu adı kullanır.

Azure SQL Veritabanı

Azure SQL Veritabanı şifreleme gerektirir:

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

Şirket içi SQL Server (üretim)

CA imzalı sertifikaya sahip şirket içi SQL Server için, sürücünün sunucu kimliğini doğrulaması amacıyla TrustServerCertificate=no öğesini koruyun:

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

Kendi imzalı sertifikalarla geliştirme

Kendinden imzalı sertifikalarla geliştirme sırasında, sertifika doğrulamasını atlamak için TrustServerCertificate=yes ayarını yapın:

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

SQL Server 2022 ve daha sonraki versiyonlar katı modlu

Tüm bağlantıyı baştan TLS ile saran TDS 8.0 için kullanılır Encrypt=strict :

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

Sorun giderme

"SSL Sağlayıcı: Sertifika doğrulama hatası"

Sunucu sertifikası doğrulanamadı. Bu kontrolleri yapın:

  • Sertifikanın güvenilir bir CA'dan geldiğini doğrulayın.
  • Sertifikanın son kullanma tarihinin geçerli olup olmadığını kontrol edin.
  • Sunucu ana adının sertifika CN veya SAN ile eşleştiğini doğrulayın.
  • Geliştirme için kullanın TrustServerCertificate=yes.

"TCP Sağlayıcısı: Mevcut bir bağlantı zorla kapatıldı"

Sunucu şifreleme gerektirebilir, ancak istemci bunu talep etmedi. Şu adımları deneyin:

  • Encrypt=yes öğesini bağlantı dizenize ekleyin.
  • Force Encryption ayarı için SQL Server yapılandırmasına bakın.

"Sertifika zinciri, güvenilir olmayan bir otorite tarafından verilmiştir"

Sertifikanın kök CA'sı sistemin güvenilir kök deposunda değil. Bu kontrolleri yapın:

  • CA sertifikasını güvenilir kök depoya yükleyin.
  • Azure SQL için, sisteminizin Microsoft'un CA sertifikalarına güvendiğinden emin olun.
  • Geliştirme için kullanın TrustServerCertificate=yes.

Sıkı şifrelemeyle bağlantı başarısız olur

TDS 8.0 katı mod şu gereksinimlere sahiptir:

  • Sunucu SQL Server 2022 veya daha sonrasını çalıştırmalıdır.
  • Sunucunun geçerli ve güvenilir bir sertifikaya sahip olması gerekir.
  • TrustServerCertificate=yes ayarlanamaz.

Sunucu TDS 8.0'ı desteklemiyorsa, onun yerine kullanın Encrypt=yes .