Sertifika doğrulama hatası

Not

Bu makale, ağ izlemelerini alma ve okuma konusunda bilgi sahibi olan kişilere yöneliktir.

Belirtiler

İstemciniz sunucu sertifikasını doğrulayamazsa, istemci uygulamasında aşağıdaki hata iletisini görürsünüz:

System.Data.SqlClient.SqlException:
A connection was successfully established with the server, but then an error occurred during the login process.
(provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.)
---> System.ComponentModel.Win32Exception: The certificate chain was issued by an authority that is not trusted

Ağ izleme örneği

Frame  Date and Time        Source IP    Dest IP      Description
-----  -------------------  -----------  -----------  -----------------------------------------------------------------------------------
590    8:34:51 AM 3/9/2022  10.10.10.10  10.10.10.20  TCP:Flags=CE....S., SrcPort=56277, DstPort=1433, PayloadLen=0,
593    8:34:51 AM 3/9/2022  10.10.10.20  10.10.10.10  TCP:Flags=.E.A..S., SrcPort=1433, DstPort=56277, PayloadLen=0,
596    8:34:51 AM 3/9/2022  10.10.10.10  10.10.10.20  TCP:Flags=...A...., SrcPort=56277, DstPort=1433, PayloadLen=0,
599    8:34:51 AM 3/9/2022  10.10.10.10  10.10.10.20  TDS:Prelogin, Flags=...AP..., SrcPort=56277, DstPort=1433, PayloadLen=104,
602    8:34:51 AM 3/9/2022  10.10.10.20  10.10.10.10  TDS:Response
605    8:34:51 AM 3/9/2022  10.10.10.10  10.10.10.20  TLS:TLS Rec Layer-1 HandShake: Client Hello.
614    8:34:51 AM 3/9/2022  10.10.10.20  10.10.10.10  TCP:Flags=...A...., SrcPort=1433, DstPort=56277, PayloadLen=0,
617    8:34:51 AM 3/9/2022  10.10.10.20  10.10.10.10  TLS:TLS Rec Layer-1 HandShake: Server Hello. Certificate. Server Key Exchange. Server Hello Done.
686    8:34:51 AM 3/9/2022  10.10.10.10  10.10.10.20  TCP:Flags=...A...F, SrcPort=56277, DstPort=1433, PayloadLen=0,
710    8:34:51 AM 3/9/2022  10.10.10.20  10.10.10.10  TCP:Flags=...A...., SrcPort=1433, DstPort=56277, PayloadLen=0,
713    8:34:51 AM 3/9/2022  10.10.10.20  10.10.10.10  TCP:Flags=...A...F, SrcPort=1433, DstPort=56277, PayloadLen=0,
719    8:34:51 AM 3/9/2022  10.10.10.10  10.10.10.20  TCP:Flags=...A...., SrcPort=56277, DstPort=1433, PayloadLen=0,

Açıklamaları içeren ağ izleme örneği

Frame  Date and Time        Source IP    Dest IP      Description
-----  -------------------  -----------  -----------  -----------------------------------------------------------------------------------
TCP 3-way handshake establishes a basic TCP connection.

590    8:34:51 AM 3/9/2022  10.10.10.10  10.10.10.20  TCP:Flags=CE....S., SrcPort=56277, DstPort=1433, PayloadLen=0, 
593    8:34:51 AM 3/9/2022  10.10.10.20  10.10.10.10  TCP:Flags=.E.A..S., SrcPort=1433, DstPort=56277, PayloadLen=0, 
596    8:34:51 AM 3/9/2022  10.10.10.10  10.10.10.20  TCP:Flags=...A...., SrcPort=56277, DstPort=1433, PayloadLen=0, 

The PreLogin packet from the client indicates data encryption is required. This also implies the client will try to validate the certificate.

599    8:34:51 AM 3/9/2022  10.10.10.10  10.10.10.20  TDS:Prelogin, Flags=...AP..., SrcPort=56277, DstPort=1433, PayloadLen=104,

- Tds: Prelogin
  + PacketHeader: SPID = 0, Size = 104, PacketID = 1, Window = 0
  - PreLoginPacketData:
   - PreloginOptions:
    + PreloginOptionTokens:
    - PreloginOptionData:
     + VersionData:
     - EncryptionData:
        Encryption: ENCRYPT_ON 1 (0x1)    <----- Data Encryption is Requested by the client
     + InstOptData:
     + ThreadIDData:
     + MARSData:
     + TRACEIDLengthData:
     + FederatedLengthData:

602    8:34:51 AM 3/9/2022  10.10.10.20  10.10.10.10  TDS:Response

The SSL/TLS handshake results in the server sending a certificate to the client.
For data encryption, the client tries to validate the certificate after receiving frame 617 (Server Hello).

605    8:34:51 AM 3/9/2022  10.10.10.10  10.10.10.20  TLS:TLS Rec Layer-1 HandShake: Client Hello.
614    8:34:51 AM 3/9/2022  10.10.10.20  10.10.10.10  TCP:Flags=...A...., SrcPort=1433, DstPort=56277, PayloadLen=0,
617    8:34:51 AM 3/9/2022  10.10.10.20  10.10.10.10  TLS:TLS Rec Layer-1 HandShake: Server Hello. Certificate. Server Key Exchange. Server Hello Done.

- TLS: TLS Rec Layer-1 HandShake: Server Hello. Certificate. Server Key Exchange. Server Hello Done.
  - TlsRecordLayer: TLS Rec Layer-1 HandShake:
     ContentType: HandShake:
   + Version: TLS 1.2
     Length: 847 (0x34F)
   - SSLHandshake: SSL HandShake Server Hello Done(0x0E)
      HandShakeType: ServerHello(0x02)
      Length: 81 (0x51)
    + ServerHello: 0x1
      HandShakeType: Certificate(0x0B)
      Length: 517 (0x205)
    - Cert: 0x1
       CertLength: 514 (0x202)
     - Certificates:
        CertificateLength: 511 (0x1FF)
      + X509Cert: Issuer: SSL_Self_Signed_Fallback, Subject: SSL_Self_Signed_Fallback   <---- this is SQL Server's Self-Generated Certificate
      HandShakeType: Server Key Exchange(0x0C)
      Length: 233 (0xE9)
      ServerKeyExchange: Binary Large Object (233 Bytes)
      HandShakeType: Server Hello Done(0x0E)
      Length: 0 (0x0)

The certificate is an SSL_Self_Signed_Fallback certificate, which means that it cannot be validated.
The client terminates the connection.

686    8:34:51 AM 3/9/2022  10.10.10.10  10.10.10.20  TCP:Flags=...A...F, SrcPort=56277, DstPort=1433, PayloadLen=0,
710    8:34:51 AM 3/9/2022  10.10.10.20  10.10.10.10  TCP:Flags=...A...., SrcPort=1433, DstPort=56277, PayloadLen=0,
713    8:34:51 AM 3/9/2022  10.10.10.20  10.10.10.10  TCP:Flags=...A...F, SrcPort=1433, DstPort=56277, PayloadLen=0,
719    8:34:51 AM 3/9/2022  10.10.10.10  10.10.10.20  TCP:Flags=...A...., SrcPort=56277, DstPort=1433, PayloadLen=0,

Not

Bu örnekte SQL Server'ın kendi kendine oluşturulan bir sertifika kullandığı gösterilmektedir, ancak herhangi bir nedenle istemci tarafından güvenilmemesi durumunda herhangi bir sertifika Sunucu Hello paketinde olabilir.

Açıklama

İstemci ve sunucu arasındaki iletişim akışını anlamak için ağ izlemesini denetleyin.

  • Çerçeve 590 - 599: Veri şifrelemesi gerektiğini belirten TCP el sıkışması ve PreLogin paketi.
  • Çerçeve 605 - 617: Sunucu Sertifikasını gönderen Sunucu Hello ile TLS el sıkışması.
  • Çerçeve 686 - 719: Sertifika doğrulama hatası nedeniyle bağlantı sonlandırılma.

İstemci, sunucu sertifikasının doğrulanması tetikleyen veri şifrelemesi istemektedir. Ancak, sunucu otomatik olarak imzalanan bir sertifika ()SSL_Self_Signed_Fallback göndererek yanıt verir ve bu da doğrulamanın başarısız olmasına neden olur.

İstemci veri şifrelemesi (Encrypt=yes veya Use Encryption for Data=True) istediğinde veya sunucu veri şifrelemesi gerektirdiğinde (Force Encryption=Yes yalnızca daha yeni sürücüler için), istemci sürücüsü sunucu sertifikasını doğrulamaya çalışır.

Not

Şifreleme istenmezse, PreLogin paketi yine de şifrelenir, ancak sertifika doğrulanmaz.

Sunucu sertifikasını doğrulamak için, istemcinin bilgisayar sertifika deposu sunucu sertifikasının bir kopyasını, güvenilen bir kök sertifikayı veya güvenilen bir ara sertifikayı içermelidir.

Bir üçüncü taraf sertifika yetkilisinden (CA) sertifika satın aldığınızda, Windows genellikle kök sertifikayla önceden yüklenmiş olarak gelir ve hiçbir şey yapmanız gerekmez.

Şirketinizin CA'sı varsa kök veya ara sertifikaları Grup İlkesi aracılığıyla göndermeniz veya el ile eklemeniz gerekir.

Otomatik olarak imzalanan bir sertifikanız varsa ve sertifikaya ihtiyaç duyan istemci sayısı azsa, genellikle el ile eklemeniz gerekir. Ancak, istemci sayısı büyükse, sertifikayı dağıtmak için Grup İlkesi'ni kullanabilirsiniz. Güvenlik için Özel Anahtar olmadan SQL Server'dan dışarı aktarın.

SQL Server bir sertifika kullanmıyorsa kendisi için bir sertifika oluşturur.

Risk azaltma

Kısa vadeli azaltma: uygulamanın bağlantı dizesi ayarlanırTrustServerCertificate=Yes.

Uzun vadeli risk azaltma: Sunucu için bir sertifika satın alın veya oluşturun.

Daha Fazla Bilgi