SQL Server'a bağlandığınızda "Uzak sunucudan alınan sertifika güvenilmeyen bir sertifika yetkilisi tarafından verildi" hatası

Özgün ürün sürümü: SQL Server
Özgün KB numarası: 2007728

Summary

Bu makale, bir istemci SQL Server şifreli (TLS) bağlantısı yaptığında oluşan "Uzak sunucudan alınan sertifika güvenilmeyen bir sertifika yetkilisi tarafından verildi" hatasını çözmenize yardımcı olur. Hata, istemcinin tls el sıkışması sırasında SQL Server örneğinin sunduğu sertifikayı doğrulayamadığı anlamına gelir; bunun nedeni, veren sertifika yetkilisinin (CA) istemcinin Güvenilen Kök Sertifika Yetkilileri deposunda bulunmamış olması veya SQL Server otomatik olarak imzalanan bir sertifika kullanmasıdır.

Sertifika veren CA sertifikasını istemci bilgisayara yükleyerek, doğrulama olmadan sunucu sertifikasına güvenerek ( Sunucu Sertifikasına Güven ayarı) veya istemci veya sunucudaki şifreleme yapılandırmasını değiştirerek hatayı düzeltirsiniz. Birkaç istemci sürücüsünün ve aracının son sürümleri, varsayılanlarını şifreleme gerektirecek şekilde değiştirmiştir, bu nedenle sunucuda hiçbir şey değişmese bile bir sürücü veya araç yükseltmesi sonrasında bu hatayı görebilirsiniz.

Belirtiler

SQL Server bağlandığınızda aşağıdaki hata iletisini alabilirsiniz:

Sunucuyla başarıyla bağlantı kuruldu ancak oturum açma işlemi sırasında bir hata oluştu. (sağlayıcı: SSL Sağlayıcısı, hata: 0 - Sertifika zinciri, güvenilir olmayan bir yetkili tarafından verildi.) (.Net SqlClient Veri Sağlayıcısı)

Ayrıca, Windows Sistem olay günlüğüne aşağıdaki hata iletisi kaydedilir:

Log Name:      System  
Source:        Schannel  
Date:          10/13/2020 3:03:31 PM  
Event ID:      36882  
Task Category: None  
Level:         Error  
Keywords:  
User:        USERNAME  
Computer:     COMPUTERNAME  
Description:  
The certificate received from the remote server was issued by an untrusted certificate authority. Because of this, none of the data contained in the certificate can be validated. The TLS connection request has failed. The attached data contains the server certificate.

Neden

İstemcinin doğrulayabildiği bir sertifika kullanarak SQL Server şifreli bir bağlantı yaptığınızda bu hata oluşur. Bu davranış aşağıdaki senaryolarda gerçekleşir:

Senaryo Sunucu tarafı şifreleme İstemci tarafı şifreleme Sertifika türü Sertifika veren yetkili, Güvenilen Kök Sertifika Yetkilileri deposunda mevcut
1 Yes Hayır İstemcinin güvenmediği bir kaynaktan sertifika (veren yetkili, istemci bilgisayardaki Güvenilen Kök Sertifika Yetkilileri'nde listelenmez) Hayır
2 Hayır Yes SQL Server tarafından oluşturulan otomatik olarak imzalanan sertifika No. Kendinden imzalı sertifikalar bu sertifika deposunda görünmez.

İstemci SQL Server şifreli bir bağlantı kurduğunda, Güvenli Kanal (Schannel), yerel bilgisayardaki Güvenilen Kök Sertifika Yetkilileri deposunda arama yaparak güvenilen sertifika yetkilileri listesini oluşturur. TLS el sıkışması sırasında sunucu, ortak anahtar sertifikasını istemciye gönderir. Ortak anahtar sertifikası veren, sertifika yetkilisi (CA) olarak bilinir. İstemcinin CA'ya güvendiğini onaylaması gerekir. Bunu, güvenilir CA'ların ortak anahtarlarını önceden bilerek yapar. Schannel, önceki iki senaryoda olduğu gibi güvenilmeyen bir sertifika yetkilisinin verdiği bir sertifikayı algıladığında , Belirtiler bölümünde listelenen hata iletisini alırsınız.

Uygun bir sertifika yapılandırılmaz veya algılanmazsa, Database Engine başlatma sırasında otomatik olarak imzalanan bir geri dönüş sertifikası oluşturur. Oturum açma kimlik bilgilerini şifrelemek ve sunucu tarafı veya istemci tarafı şifreleme etkinleştirildiğinde bağlantının tamamını şifrelemek için bu sertifikayı kullanır. Hiçbir istemci otomatik olarak imzalanan bir sertifikaya varsayılan olarak güvenmez; bu nedenle, istemci ve sunucu aynı bilgisayarda çalıştırıldığında bile varsayılan SQL Server yüklemesinde bu hata oluşabilir. Daha fazla bilgi için bkz . Oturum açma paketi şifrelemesi ile veri paketi şifrelemesi karşılaştırması.

Sürücü veya araç yükseltmesi sonrasında bu hatanın neden göründüğü

Aşağıdaki tabloda yer alan istemci sürücüsü ve araç sürümleri, varsayılan değerlerini şifreleme gerektirecek şekilde değiştirmiştir. Bu sürümlerden birine yükseltildikten sonra istemci bağlantıyı şifreler ve sunucu yapılandırması değişmese bile sunucu sertifikasını doğrular. Önceki sürümler varsayılan olarak şifreleme gerektirmediğinden, açıkça şifreleme isteğinde bulunmadığınız sürece sertifika doğrulanmamıştır.

İstemci sürücüsü veya aracı Version Varsayılan şifreleme davranışı
SQL Server için Microsoft OLE DB Sürücüsü (MSOLEDBSQL19) 19 ve sonraki sürümler Encrypt varsayılan değer: Mandatory
SQL Server için Microsoft ODBC Sürücüsü 18 ve sonraki sürümler Encrypt varsayılan değer: Mandatory
Microsoft.Data.SqlClient 4.0 ve sonraki sürümler Encrypt varsayılan değer: True
SQL Server Management Studio (SSMS) 20 ve üzeri sürümler Şifreleme varsayılan olarak Zorunlu'dur

Bir uygulamayı Yerel İstemci 11.0'dan (SNAC) SQL Server Microsoft OLE DB Sürücüsü 19 veya Microsoft ODBC Sürücüsü 18'e geçirdikten hemen sonra bu hatayı görürseniz, bkz. Sürücü yükseltmesinden sonra sertifika zinciri güvenilir değil.

SNAC, SQL Server 2022 (16.x) ve sonraki sürümlerle ya da SSMS 19 ve sonraki sürümlerle birlikte gönderilmez ve yeni geliştirme için önerilmez. Microsoft OLE DB Driver for SQL Server, SQL Server için Microsoft ODBC Sürücüsünü veya Microsoft.Data.SqlClient bunun yerine kullanın. Daha fazla bilgi için bkz. SQL Server Native Client için destek ilkeleri.

Çözüm

SQL Server bağlantılarını şifrelemek için kasıtlı olarak güvenilmeyen bir yetkiliden bir sertifika veya otomatik olarak imzalanan bir sertifika kullanıyorsanız, aşağıdaki seçeneklerden birini kullanın:

1. Seçenek: İstemci bilgisayara sertifika yetkilisini yükleme

1. senaryo için, şifrelenmiş bağlantıyı başlatan istemci bilgisayardaki Güvenilen Kök Sertifika Yetkilileri deposuna sertifika yetkilisini ekleyin. Bunu yapmak için 1. Adım: Sunucu sertifikasını bir dosyaya aktarın ve 2. Adım: Kök sertifika yetkilisini (CA) bu sırada istemci bilgisayar yordamlarına yükleyin.

1. Adım: Sunucu sertifikasını bir dosyaya aktarma

SQL Server bilgisayarda, SQL Server kullandığı sertifikayı bir dosyaya aktarın. Aşağıdaki adımlarda örnek dosya adı olarak caCert.cer kullanılır. Bu dosya, bu işlemde oluşturulana kadar mevcut değildir. Adı ve konumu seçersiniz.

  1. Başlat'ı seçin, mmc yazın ve Microsoft Yönetim Konsolu açın.

  2. Dosya>Snap-in Ekle/Kaldır'ı seçin.

  3. Kullanılabilir ek bileşenler listesindeSertifikalar'ı ve ardından Ekle'yi seçin.

  4. Bilgisayar hesabı'nı seçin, İleri'yi seçin, Yerel bilgisayar: (bu konsolun çalıştığı bilgisayar) öğesini ve ardından Son'u seçin.

    Not

    SQL Server sertifikaları Yerel Bilgisayar\Kişisel sertifika deposuna yüklenir. Kullanıcı hesabım'ı seçerseniz MMC farklı bir sertifika deposu açar ve SQL Server sertifikası görünmez.

  5. Ek Bileşen Ekle veya Kaldır iletişim kutusunu kapatmak için Tamam'ı seçin.

  6. Sol bölmede Sertifikalar (Yerel Bilgisayar) öğesini genişletin, Kişisel'i genişletin ve ardından Sertifikalar'ı seçin.

  7. SQL Server tarafından kullanılan sertifikaya sağ tıklayın ve ardından Tüm Görevler>Dışa Aktar seçeneğini belirleyin.

    Tavsiye

    SQL Server kullandığı sertifikayı tanımlamak için SQL Server Yapılandırma Yöneticisi açın, Ağ Yapılandırması SQL Server genişletin, örnek adı> için <Protokoller'e sağ tıklayın, Özellikler'i seçin ve ardından Sertifika sekmesini seçin. SQL Server hata günlüğü "Şifreleme için otomatik olarak oluşturulan bir sertifika başarıyla yüklendi" girdisini içeriyorsa, SQL Server oluşturulan bir geri dönüş sertifikası kullanır. Bu sertifikayı dışarı aktaramazsınız, bu nedenle bunun yerine Seçenek 2 veya Seçenek 3'i kullanın.

  8. Sertifika Dışarı Aktarma Sihirbazı'nınHoş Geldiniz sayfasından geçmek için İleri'yi seçin.

  9. Hayır, özel anahtarı dışarı aktarmayın seçeneğinin seçili olduğunu doğrulayın ve ardından İleri'yi seçin.

  10. DER kodlu ikili X.509 (.CER) veya Base-64 kodlu X.509 (.CER) seçeneklerinden birinin seçili olduğundan emin olun ve ardından İleri seçeneğini belirleyin.

  11. caCert.cer gibi bir dışarı aktarma dosyası adı girin.

  12. sertifikayı dışarı aktarmak için İleri'yi ve ardından Son'u seçin.

  13. Dışarı aktarılan .cer dosyasını istemci bilgisayara kopyalayın.

2. Adım: İstemci bilgisayara kök sertifika yetkilisini (CA) yükleme

  1. İstemci bilgisayarda MMC'yi açın, Dosya>Ek Bileşeni Ekle/Kaldır'ı seçin, Kullanılabilir ek bileşenler listesinde Sertifikalar'ı ve ardından Ekle'yi seçin.

  2. Sertifikalar ek bileşeni iletişim kutusunda Bilgisayar hesabı'nı seçin ve ardından İleri'yi seçin.

  3. Bilgisayar Seç bölmesinde Yerel bilgisayar: (bu konsolun üzerinde çalıştığı bilgisayar) öğesini ve ardından Son'u seçin.

  4. Ek Bileşen Ekle veya Kaldır iletişim kutusunu kapatmak için Tamam'ı seçin.

  5. MMC'nin sol bölmesinde Sertifikalar (Yerel Bilgisayar) düğümünü genişletin.

  6. Güvenilen Kök Sertifika Yetkilileri düğümünü genişletin, Sertifikalar alt klasörüne sağ tıklayın, Tüm Görevler seçeneğini ve ardından İçe Aktar seçeneğini seçin.

  7. Sertifika İçeri Aktarma Sihirbazı'nınHoş Geldiniz sayfasında İleri'yi seçin.

  8. İçe Aktarılacak Dosya sayfasında Gözat'ı seçin.

  9. caCert.cer sertifika dosyasının konumuna göz atın, dosyayı seçin ve ardından Aç'ı seçin.

  10. İçeri Aktaracak Dosya sayfasında İleri'yi seçin.

  11. Sertifika Deposu sayfasında varsayılan seçimi kabul edin ve İleri'yi seçin.

  12. Sertifika İçe Aktarma Sihirbazını Tamamlama sayfasında Bitir'i seçin.

Seçenek 2: Doğrulamadan sunucu sertifikasına güvenme

1. ve 2. senaryolar için istemci uygulamanızda Sunucu Sertifikasına Güven ayarını yapın. Bu ayar bağlantıyı şifreli tutar ancak sertifika doğrulamayı atlar. Anahtar sözcük adı ve kabul edilen değerler istemci kitaplığına bağlıdır:

Müşteri kütüphanesi Bağlantı dizesi anahtar sözcüğü
Microsoft.Data.SqlClient TrustServerCertificate=True
SQL Server için Microsoft ODBC Sürücüsü TrustServerCertificate=yes
Microsoft OLE DB Driver for SQL Server (sağlayıcı dizesi) TrustServerCertificate=yes
SQL Server için Microsoft OLE DB Sürücüsü (ADO veya IDataInitialize) Trust Server Certificate=true
SQL Server için Microsoft JDBC Sürücüsü trustServerCertificate=true

SQL Server Management Studio (SSMS) 20 veya sonraki bir sürümü kullanarak bağlanırsanız Sunucuya Bağlan iletişim kutusunun Oturum Açma sayfasında Sunucu sertifikasına güven onay kutusunu seçin. SSMS'nin önceki sürümlerinde Sunucuya Bağlan penceresinde Seçenekler'i seçin, Bağlantı Özellikleri sekmesini ve ardından Sunucu sertifikasına güven'i seçin.

İstemci kitaplığınız için bu ayarı yapılandırma hakkında daha fazla bilgi için aşağıdaki makalelere bakın:

Not

Güven Sunucusu Sertifikası ayarı şifrelemeyi devre dışı bırakmaz. Bağlantı şifreli kalır, ancak istemci sunucunun kimliğini doğrulamaz.

Caution

Otomatik olarak imzalanan sertifika kullanan şifrelenmiş bağlantılar güçlü güvenlik sağlamaz. Ortadaki adam saldırılarına karşı hassaslar. Üretim ortamında veya İnternet'e bağlı sunucularda otomatik olarak imzalanan sertifikalara sahip TLS'ye güvenmeyin.

Seçenek 3: Şifreleme yapılandırmasını değiştirme

Önceki bölümlerde açıklanan yapılandırma istenmeyen bir yapılandırmaysa, bu sorunu çözmek için aşağıdaki seçeneklerden birini kullanın:

  • Database Engine güvenilen bir yetkiliden sertifika kullanacak şekilde yapılandırın. İstemciler ek yapılandırma olmadan sertifikayı doğruladığı için bu seçenek en güvenli uzun vadeli düzeltmedir. Daha fazla bilgi için bkz. Database Engine şifreli bağlantıları etkinleştirme ve SQL Server için Sertifika gereksinimleri.

  • Şifreleme gerekli değilse:

    • İstemci uygulamanızda şifrelemeyi kapatın. OLE DB sağlayıcı dizesi için Use Encryption for Data=Optional, OLE DB ADO veya Encrypt=no için IDataInitialize, ODBC için Encrypt=False ve Encrypt=Optional ya da Microsoft JDBC Sürücüsü için Microsoft.Data.SqlClient ayarlayın. SSMS 20 ve sonraki sürümlerde, Sunucuya Bağlan iletişim kutusunun Oturum Açma sayfasında Şifreleme'yiİsteğe Bağlı olarak ayarlayın.

    • SQL Server Yapılandırma Yöneticisi kullanarak sunucu tarafı şifrelemeyi kapatın. SQL Server Ağ Yapılandırması'nı genişletin, >örnek adı< için Protokoller'e sağ tıklayın, Özellikler'i seçin, Bayraklar sekmesini seçin, Şifrelemeyi Zorla değerini Hayır olarak ayarlayın ve ardından SQL Server hizmetini yeniden başlatın. Daha fazla bilgi için bkz. MSSQLSERVER Özellikleri protokolleri (Bayraklar sekmesi).

      Warning

      Şifrelemeyi kapatırsanız, kimlik bilgileri ve veriler korumasız ağ üzerinden hareket eder. Yalnızca güvenilen, yalıtılmış ağlarda şifrelemeyi kapatın.