“ ห่วงโซ่ใบรับรองออกโดยหน่วยงานที่ไม่น่าเชื่อถือ” เมื่อเชื่อมต่อฐานข้อมูลในบทบาทของ VM จากเว็บไซต์ Azure


191

ฉันพบข้อผิดพลาดเมื่อเชื่อมต่อฐานข้อมูลของฉันซึ่งอยู่ในบทบาท VM (ฉันมีบทบาท SQL VM) จากเว็บไซต์ Azure ทั้งบทบาทของ VM และเว็บไซต์ Azure อยู่ในโซนตะวันตก ฉันกำลังเผชิญปัญหาต่อไปนี้:

SqlException (0x80131904): สร้างการเชื่อมต่อสำเร็จแล้วกับเซิร์ฟเวอร์ แต่เกิดข้อผิดพลาดขึ้นในระหว่างกระบวนการเข้าสู่ระบบ (ผู้ให้บริการ: ผู้ให้บริการ SSL ข้อผิดพลาด: 0 - ห่วงโซ่ใบรับรองออกโดยหน่วยงานที่ไม่น่าเชื่อถือ)]

ฉันสามารถเชื่อมต่อกับฐานข้อมูลของฉันโดยใช้ SSMS 1433 พอร์ตเปิดอยู่บนบทบาท VM ของฉัน เกิดอะไรขึ้นกับการเชื่อมต่อของฉัน

คำตอบ:


367

คุณอาจไม่มีใบรับรองที่ลงนามโดย CA ติดตั้งในที่เก็บ root ที่เชื่อถือได้ของ SQL VM ของคุณ

หากคุณมีEncrypt=Trueสตริงการเชื่อมต่อให้ตั้งค่าเป็นปิด (ไม่แนะนำ) หรือเพิ่มสิ่งต่อไปนี้ในสตริงการเชื่อมต่อ:

TrustServerCertificate=True

SQL Server จะสร้างใบรับรองแบบลงนามด้วยตนเองหากคุณไม่ได้ติดตั้งเพื่อใช้งาน แต่ผู้โทรจะไม่เชื่อถือเนื่องจากไม่ได้ลงนามใน CA เว้นแต่คุณจะแจ้งให้สตริงการเชื่อมต่อเชื่อถือเซิร์ฟเวอร์รับรองใด ๆ โดย ค่าเริ่มต้น.

ในระยะยาวฉันขอแนะนำให้ใช้ประโยชน์จากLet's Encryptเพื่อรับใบรับรองที่ CA ลงนามจาก CA ที่เชื่อถือได้ที่รู้จักกันฟรีและติดตั้งลงบน VM อย่าลืมตั้งค่าให้รีเฟรชอัตโนมัติ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับหัวข้อนี้ในหนังสือ SQL Server ทางออนไลน์ภายใต้หัวข้อ "ลำดับชั้นการเข้ารหัส" และ "การใช้การเข้ารหัสโดยไม่มีการตรวจสอบ"


1
ขอโทษที่ฉันไม่ดี TTrusted_Connection = False ถูกตั้งค่าในสตริงการเชื่อมต่อ การตั้งค่ามันใช้งานได้จริงสำหรับฉัน Thanx อยู่แล้ว
ZafarYousafi

1
@ZafarYousafi คุณควรทำเครื่องหมายคำตอบนี้ว่าถูกต้อง
Termato

5
ไม่แนะนำให้ตั้งค่าTrustServerCertificate- trueปิดใช้งานการตรวจสอบใบรับรอง นั่นคือไม่ดีกว่าเพียงแค่การตั้งค่าEncryptไปfalse!
แมตต์โทมัส

5
คำแนะนำที่ได้รับ "TrustServerCertificate = True" ในคำตอบนี้อาจทำให้ปัญหาหายไป แต่เป็นคำแนะนำที่แย่มาก แก้ไขสาเหตุไม่ใช่อาการ อีกส่วนหนึ่งของคำตอบที่แนะนำให้ติดตั้งใบรับรองที่ลงนามโดย CA คือวิธีการที่จะไป
มิทช์ข้าวสาลี

ใน SSMS เวอร์ชันที่ใหม่กว่าคุณจะพบตัวเลือกเล็ก ๆ ที่เรียกว่า "ใบรับรองเซิร์ฟเวอร์เชื่อถือ" ในแท็บ "คุณสมบัติการเชื่อมต่อ" การตรวจสอบเด็กคนนี้มีผลเช่นเดียวกับคำสั่งที่ระบุไว้ข้างต้น
gwynbleidd

87

หากคุณใช้ SQL Management Studio โปรดไปที่คุณสมบัติการเชื่อมต่อและคลิกที่ "เชื่อถือเซิร์ฟเวอร์รับรอง" หากคุณใช้ SQL Management Studio โปรดไปที่คุณสมบัติการเชื่อมต่อและคลิกที่ "เชื่อถือเซิร์ฟเวอร์รับรอง"


18
มันไม่ได้เป็นคำแนะนำที่ไม่ดีต่อ se ฉันจะบอกว่าคุณสามารถใช้มันเมื่อคุณต้องการเชื่อมต่อกับเซิร์ฟเวอร์การพัฒนาและทำงานของคุณเช่นการเข้ารหัส ในฐานะนักพัฒนาซอฟต์แวร์ฉันต้องต่อสู้กับ DevOps ที่ไม่มีเวลาแก้ไขสิ่งต่าง ๆ อย่างรวดเร็วและฉันไม่สามารถเสียเวลาอันมีค่ากับกำหนดเวลาได้ การเปิดรับข้อมูลที่มีน้ำหนักการปิดตัวเลือกนี้ขึ้นอยู่กับสภาพแวดล้อมของคุณเป็นจำนวนมากหากอยู่ในพื้นที่หรือห่างไกลผู้ดูแลระบบจะตั้งค่าอย่างไรข้อ จำกัด IP และสามารถลดได้อย่างง่ายดายด้วยวิธีแก้ไขปัญหาอื่น ๆ คุณไม่สามารถพูดได้ว่ามันเป็นคำแนะนำที่ไม่ดีหากไม่มีข้อมูลเกี่ยวกับโครงสร้างพื้นฐานของคุณ
OrizG

คุณเพิ่งบันทึกวันของฉัน ขอบคุณ @ ct.tan
Milinda Wickramasinghe

@OrizG ฉันมี SQL Server ติดตั้งอยู่ในเครื่องท้องถิ่นและฉันใช้มันสำหรับโครงการส่วนบุคคล ในขณะนี้ฉันไม่ต้องการใช้เงินกับมันดังนั้นฉันจึงได้โฮสต์ฟรีและพยายามกำหนดค่าเซิร์ฟเวอร์ในแบบที่ฉันสามารถเซ็นใบรับรองและแลกเปลี่ยนพวกเขาระหว่างเซิร์ฟเวอร์และลูกค้าที่ฉัน จะใช้เพื่อเข้าถึง อย่างไรก็ตามเนื่องจากโฮสต์ฟรีฉันจึงไม่สามารถจัดการกับ Let's Encrypt ได้ อะไรคือข้อเสียของโซลูชันนี้เปรียบเทียบกับการแลกเปลี่ยนใบรับรองอย่างถูกต้องกับ CA ที่ลงนามใบรับรองที่เชื่อถือได้หรือไม่
ccoutinho

31

หากคุณเห็นข้อความแสดงข้อผิดพลาดนี้เมื่อพยายามเชื่อมต่อโดยใช้ SSMS ให้เพิ่มTrustServerCertificate=Trueพารามิเตอร์การเชื่อมต่อเพิ่มเติม


23
มิทช์คุณแสดงความคิดเห็นแบบเดียวกันกับคำตอบสามข้อสำหรับคำถามนี้ อาจเป็นประโยชน์กับผู้อ่านรายอื่นหากคุณให้ข้อมูลหรือลิงก์ที่สำคัญว่าทำไมนี่คือ "คำแนะนำที่แย่จริงๆ"
Shoeless

@Shoeless แสดงความคิดเห็นหลายคำตอบที่ได้รับการยอมรับ
Tom Blodget

4

หากคุณพยายามเข้าถึงผ่านการเชื่อมต่อข้อมูลใน Visual Studio 2015 และรับข้อผิดพลาดข้างต้นจากนั้นไปที่ขั้นสูงและตั้งค่า TrustServerCertificate=True ข้อผิดพลาดให้หายไป


9
มันไม่ได้เป็นคำแนะนำที่ไม่ดีต่อ se ฉันจะบอกว่าคุณสามารถใช้มันเมื่อคุณต้องการเชื่อมต่อกับเซิร์ฟเวอร์การพัฒนาและทำงานของคุณเช่นการเข้ารหัส ในฐานะนักพัฒนาซอฟต์แวร์ฉันต้องต่อสู้กับ DevOps ที่ไม่มีเวลาแก้ไขสิ่งต่าง ๆ อย่างรวดเร็วและฉันไม่สามารถเสียเวลาอันมีค่ากับกำหนดเวลาได้ การเปิดรับข้อมูลที่มีน้ำหนักการปิดตัวเลือกนี้ขึ้นอยู่กับสภาพแวดล้อมของคุณเป็นจำนวนมากหากอยู่ในพื้นที่หรือห่างไกลผู้ดูแลระบบจะตั้งค่าอย่างไรข้อ จำกัด IP และสามารถลดได้อย่างง่ายดายด้วยวิธีแก้ไขปัญหาอื่น ๆ คุณไม่สามารถพูดได้ว่ามันเป็นคำแนะนำที่ไม่ดีหากไม่มีข้อมูลเกี่ยวกับโครงสร้างพื้นฐานของคุณ
OrizG

1

พบปัญหาเดียวกันขณะเข้าใช้งาน SQLServer จาก IIS การเพิ่ม TrustServerCertificate = True ไม่ได้ช่วยอะไร

อาจเห็นความคิดเห็นในเอกสาร MS: ตรวจสอบให้แน่ใจว่าบัญชีบริการ SQLServer มีสิทธิ์เข้าถึง TLS Certificate ที่คุณใช้ (NT Service \ MSSQLSERVER)

เปิดร้านค้าส่วนบุคคลและคลิกขวาที่ใบรับรอง -> จัดการกุญแจส่วนตัว -> เพิ่มบัญชีบริการ SQL และให้การควบคุมเต็มรูปแบบ

เริ่มบริการ SQL ใหม่ มันได้ผล


0

เดียวกันสามารถทำได้จากลูกค้า SSMS เอง เพียงเปิด ssms ใส่ชื่อเซิร์ฟเวอร์แล้วเลือกตัวเลือกภายใต้คุณสมบัติการเชื่อมต่อหัวเรื่องตรวจสอบให้แน่ใจว่ามีการตรวจสอบใบรับรองเซิร์ฟเวอร์ที่เชื่อถือได้


0

ฉันได้รับปัญหานี้ขณะนำเข้าข้อมูล Excel ไปยัง SQLDatabase ผ่าน SSMS วิธีแก้ไขคือตั้งค่าTrustServerCertificate = Trueในส่วนความปลอดภัย


0

ฉันพบข้อผิดพลาดนี้ในการพยายามเรียกใช้ตัวสร้างโปรไฟล์แม้ว่าการเชื่อมต่อของฉันมีการตรวจสอบใบรับรองเซิร์ฟเวอร์ที่เชื่อถือได้และฉันได้เพิ่มTrustServerCertificate=Trueในส่วนขั้นสูง ฉันเปลี่ยนเป็นอินสแตนซ์ของ SSMS ที่ทำงานในฐานะผู้ดูแลระบบและผู้สร้างโปรไฟล์เริ่มต้นโดยไม่มีปัญหา (ก่อนหน้านี้ฉันพบว่าเมื่อการเชื่อมต่อของฉันแม้แต่ในพื้นที่ใช้เวลานานในการเชื่อมต่อการทำงานในฐานะผู้ดูแลระบบช่วย)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.