อัปเดตบริการเว็บ. NET เพื่อใช้ TLS 1.2


99

ฉันจำเป็นต้องใช้ TLS 1.2 เพื่อเชื่อมต่อจากบริการเว็บ. NET ของฉันไปยังบริการอื่นที่จะบังคับใช้ TLS 1.2 ฉันพบแหล่งข้อมูลที่ระบุว่า. NET 4.6 ใช้ TLS 1.2 เป็นค่าเริ่มต้นซึ่งดูเหมือนจะเป็นวิธีแก้ปัญหาที่ง่ายที่สุด ฉันอัพเดต. NET framework บนเซิร์ฟเวอร์และรีสตาร์ท ใน IIS ฉันพยายามสร้างแอปพลิเคชันพูลโดยใช้. NET 4.6 แต่ 4.0 เป็นตัวเลือกเดียว จากนั้นฉันพบบางสิ่งที่บอกว่ามันยังคงเป็น 4.0 เพราะ 4.6 เป็นการอัปเดต "ในสถานที่" เป็น. NET 4.0 ดังนั้นฉันคิดว่าบางทีฉันอาจจะเสร็จแล้ว อย่างไรก็ตามในหน้าแสดงข้อผิดพลาดที่ฉันได้รับด้วยเหตุผลที่ไม่เกี่ยวข้องมันบอกMicrosoft .NET Framework Version:4.0.30319ว่าฉันอัปเกรดไม่สำเร็จ คำแนะนำใด ๆ เกี่ยวกับวิธีตรวจสอบให้แน่ใจว่าพูลแอปพลิเคชันของฉันใช้. NET 4.6 หรือมากกว่านั้นโดยทั่วไปจะเปิดใช้งาน TLS 1.2 ได้อย่างไร


4
ฉันเชื่อว่าต้องเปิดใช้งาน TLS12 บนเซิร์ฟเวอร์ support.quovadisglobal.com/kb/a433/…
lcryder

4
ทำไมต้องโหวตลง?
nasch

คำตอบ:


140

เราเพิ่งอัปเกรดบริการเว็บ. NET เป็น 4.6 เพื่ออนุญาต TLS 1.2

สิ่งที่อาร์เทมพูดเป็นขั้นตอนแรกที่เราทำ เราคอมไพล์เฟรมเวิร์กของบริการเว็บใหม่เป็น 4.6 และเราพยายามเปลี่ยนคีย์รีจิสทรีเพื่อเปิดใช้งาน TLS 1.2 แม้ว่าจะไม่ได้ผล แต่การเชื่อมต่อยังอยู่ใน TLS 1.0 นอกจากนี้เราไม่ต้องการไม่อนุญาต SLL 3.0, TLS 1.0 หรือ TLS 1.1 บนเครื่อง: บริการเว็บอื่น ๆ สามารถใช้สิ่งนี้ได้ เราย้อนกลับการเปลี่ยนแปลงของเราในรีจิสทรี

เราเปลี่ยนไฟล์ Web.Config เพื่อบอก IIS ว่า: "เดี๋ยวก่อนเรียกฉันใน 4.6 โปรด"

นี่คือการเปลี่ยนแปลงที่เราเพิ่มใน web.config + recompilation ใน. NET 4.6:

<system.web>
    <compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 -->

    <!--Added this httpRuntime -->
    <httpRuntime targetFramework="4.6" />

    <authentication mode="Windows"/>
    <pages controlRenderingCompatibilityVersion="4.0"/>
</system.web>

และการเชื่อมต่อเปลี่ยนเป็น TLS 1.2 เนื่องจากขณะนี้ IIS กำลังเรียกใช้บริการเว็บใน 4.6 (บอกอย่างชัดเจน) และ 4.6 ใช้ TLS 1.2 โดยค่าเริ่มต้น


3
นี่คือเอกสารที่เราใช้ในการวิจัย: HTTPRuntime , RenderingCompatibility
Etienne Faucher

1
ฉันคิดออก - ฉันไม่ได้ขอ HTTPS หลังจากที่ฉันแก้ไขแล้วมันก็ใช้งานได้
nasch

3
การเปลี่ยนการคอมไพล์เป็น 4.6 และการเพิ่ม httpRuntime 4.6 ก็เพียงพอแล้วในกรณีของเราขอบคุณสำหรับการแก้ปัญหา!
krilovich

2
นี่คือคำตอบที่ถูกต้อง เพิ่งผ่านไปเมื่อไม่นานนี้เอง นี่คือบล็อกโพสต์เกี่ยวกับเรื่องนี้: blog.thelevelup.com/pci-security-is-your-restaurant-readyและโครงการ GitHub ที่ทำสิ่งนี้: github.com/TheLevelUp/pos-tls-patcher
user24601


88

เพิ่มรหัสต่อไปนี้ก่อนที่คุณจะสร้างอินสแตนซ์ไคลเอนต์บริการเว็บของคุณ:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

หรือสำหรับความเข้ากันได้แบบย้อนหลังกับ TLS 1.1 และรุ่นก่อนหน้า:

System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12; 

2
ใช่ฉันทำไปแล้ว แต่ข้อความแสดงข้อผิดพลาดยังคงระบุว่า. NET 4.0
nasch

12
นั่นคือเวอร์ชัน CLR ของคุณ .Net CLR มีสองเวอร์ชัน 2.0 และ 4.0 ใน IIS คุณระบุเวอร์ชัน CLR ไม่ใช่เวอร์ชัน Framework IIS จะไม่บอกคุณ Net 4.6 เพราะมันไม่สนใจเรื่องนั้น หากคุณคอมไพล์โดยใช้ 4.6 แสดงว่าคุณกำลังใช้ 4.6
Amy

2
TLS 1.2 รองรับตั้งแต่. NET 4.5 เป็นต้นไป
Gilberto Alexandre

5
ในกรณีนี้ | = ดีกว่า just = เป็นแฟล็กไบนารีอย่าเขียนทับทุกอย่างโดยไม่จำเป็น
Izzy

2
@JohnWu - โปรดสังเกตความคิดเห็นของ Izzy ด้านบน รหัสของคุณบอกให้. NET ใช้ TLS 1.2 อย่างชัดเจนเมื่อเชื่อมต่อกับทรัพยากร HTTPS กล่าวคือหากเซิร์ฟเวอร์มีเฉพาะ TLS 1.1 รหัสของคุณจะหยุดการเชื่อมต่อเนื่องจากใช้เฉพาะ TLS 1.2 เท่านั้น คุณควรใช้ | = เพื่อบอกรหัสของคุณว่า "พยายามใช้ TLS 1.2 เป็นตัวเลือกด้วย" เมื่อไคลเอนต์และเซิร์ฟเวอร์เจรจากันว่าจะใช้โปรโตคอลใด
Don Cheadle

27

หากคุณใช้. Net ที่เร็วกว่า 4.5 คุณจะไม่มี Tls12 ใน enum ดังนั้นสถานะจึงถูกกล่าวถึงอย่างชัดเจนที่นี่

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

17

ต้องการสามขั้นตอน:

  1. ทำเครื่องหมาย SSL2.0, TLS1.0, TLS1.1 อย่างชัดเจนว่าเป็นสิ่งต้องห้ามบนเครื่องเซิร์ฟเวอร์ของคุณโดยการเพิ่มEnabled=0และDisabledByDefault=1ลงในรีจิสทรีของคุณ (เส้นทางแบบเต็มคือHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols) ดูรายละเอียดในหน้าจอ รีจิสทรี

  2. เปิดใช้งานอย่างชัดเจนTLS1.2โดยทำตามขั้นตอนตั้งแต่ 1 เพียงใช้Enabled=1และDisabledByDefault=0ตามลำดับ

หมายเหตุ: ตรวจสอบเวอร์ชันเซิร์ฟเวอร์: Windows Server 2003ไม่รองรับTLS 1.2โปรโตคอล

  1. เปิดใช้งานTLS1.2ในระดับแอปเท่านั้นเช่น @John Wu ที่แนะนำข้างต้น

    System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

หวังว่าคู่มือนี้จะช่วยได้

UPDATE ตามที่ @Subbu กล่าวถึง: คู่มืออย่างเป็นทางการ


1
อ้างอิงอย่างเป็นทางการ - technet.microsoft.com/en-us/library/...
Subbu

สวัสดี @Artem หลังจากเพิ่ม tls ฉันต้องรีสตาร์ทเซิร์ฟเวอร์หรือไม่
Simba

@Simba คุณคงแก้ปัญหานี้ได้ แต่ตอนนี้ฉันไม่จำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์
Matt N.

5

สำหรับฉันด้านล่างทำงาน:

ขั้นตอนที่ 1:ดาวน์โหลดและติดตั้งเว็บ Installer exe จากhttps://www.microsoft.com/en-us/download/details.aspx?id=48137 บนแอปพลิเคชันเซิร์ฟเวอร์ รีบูตแอ็พพลิเคชันเซิร์ฟเวอร์หลังจากการติดตั้งเสร็จสิ้น

ขั้นตอนที่ 2:เพิ่มการเปลี่ยนแปลงด้านล่างในweb.config

<system.web>
    <compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 -->
    <!--Added this httpRuntime -->
    <httpRuntime targetFramework="4.6" />
</system.web>

ขั้นตอนที่ 3: "หลังจากขั้นตอนที่ 1 และ 2 เสร็จสิ้นก็ทำให้เกิดข้อผิดพลาด. WebForms UnobtrusiveValidationMode ต้องใช้ ScriptResourceMapping สำหรับ 'jQuery' โปรดเพิ่ม ScriptResourceMapping ชื่อ jQuery (เป็นกรณี ๆ ไป) " และในการแก้ไขข้อผิดพลาดนี้ฉันเพิ่มด้านล่างที่สำคัญในappsettingsในไฟล์web.configของฉัน

<appSettings>
      <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>

การเพิ่มเฟรมเวิร์กเป้าหมาย httpRuntime ใช้ได้ผลสำหรับฉัน
Mark Redman

0

PowerBI Embedded ต้องการ TLS 1.2

คำตอบข้างต้นของEtienne Faucherคือทางออกของคุณ ลิงก์ด่วนไปยังคำตอบด้านบน ... ลิงก์ด่วนไปยังคำตอบด้านบน ... ( https://stackoverflow.com/a/45442874 )

PowerBI ต้องการ TLS 1.2 มิถุนายน 2020 - นี่คือคำตอบของคุณ - พิจารณาบังคับให้รันไทม์ IIS ของคุณสูงถึง 4.6 เพื่อบังคับให้พฤติกรรม TLS 1.2 เริ่มต้นที่คุณกำลังมองหาจากเฟรมเวิร์ก คำตอบข้างต้นช่วยให้คุณมีโซลูชันการเปลี่ยนแปลงการกำหนดค่าเท่านั้น

อาการ : บังคับให้ปิดการเชื่อมต่อ TCP / IP ที่ถูกปฏิเสธไปยัง Microsoft PowerBI Embedded ที่เพิ่งปรากฏขึ้นในระบบของคุณในทันที

PowerBI Call เหล่านี้หยุดทำงานโดยมีข้อผิดพลาด Hard TCP / IP Close เช่นไฟร์วอลล์จะบล็อกการเชื่อมต่อ โดยปกติขั้นตอนการตรวจสอบสิทธิ์จะทำงาน - เมื่อคุณกดบริการสำหรับพื้นที่ทำงานเฉพาะและรหัสรายงานว่าล้มเหลว

นี่คือบันทึกประจำปี 2020 จาก Microsoft PowerBI เกี่ยวกับ TLS 1.2 ที่จำเป็น

PowerBIClient

วิธีการที่แสดงปัญหานี้

GetReportsInGroupAsync GetReportsInGroupAsAdminAsync GetReportsAsync GetReportsAsAdminAsync Microsoft.PowerBI.Api HttpClientHandler Force TLS 1.1 TLS 1.2

ค้นหาข้อผิดพลาดเงื่อนไขเพื่อช่วยให้ผู้อื่นพบสิ่งนี้: System.Net.Http.HttpRequestException: มีข้อผิดพลาดเกิดขึ้นขณะส่งคำขอ System.Net.WebException: การเชื่อมต่อพื้นฐานถูกปิด: เกิดข้อผิดพลาดที่ไม่คาดคิดในการส่ง System.IO.IOException: ไม่สามารถอ่านข้อมูลจากการเชื่อมต่อการขนส่ง: การเชื่อมต่อที่มีอยู่ถูกบังคับปิดโดยรีโมตโฮสต์

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