คำขอถูกยกเลิก: ไม่สามารถสร้างช่องทางที่ปลอดภัย SSL/TLS c# Webrequest

ฉันกำลังพยายามเรียกใช้บริการโดยใช้ชุดโค้ดด้านล่างใน c# ฉันใช้ .NET Framework 4.6.2 และเมื่อใดก็ตามที่ฉันไปถึงโค้ด (HttpWebResponse)myHttpWebRequest.GetResponse() มันกำลังส่งข้อยกเว้น คำขอถูกยกเลิก: ไม่สามารถสร้างช่องทางที่ปลอดภัย SSL/TLS ฉันลองใช้วิธีแก้ไขปัญหาหลายอย่างใน stack overflow แต่ไม่มีสักอย่างที่ไม่เป็นประโยชน์สำหรับฉัน ฉันกำลังดิ้นรนกับเรื่องนี้จากหนึ่งสัปดาห์ที่ผ่านมาในที่สุดก็โพสต์ที่นี่ กรุณาช่วยใด ๆ ที่จะได้รับการชื่นชม ฉันยังเพิ่มใบรับรองในร้านค้าท้องถิ่น แต่ก็ยังไม่มีประโยชน์ ด้านล่างคือรหัสของฉัน

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Uri myUri = new Uri("https://CallingUrl");
WebRequest myWebRequest = HttpWebRequest.Create(myUri);
HttpWebRequest myHttpWebRequest = (HttpWebRequest)myWebRequest;
string svcCredentials = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes("User:Pwd"));
myHttpWebRequest.Headers.Add("Authorization", "Basic " + svcCredentials);
myHttpWebRequest.PreAuthenticate = true;
myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
myHttpWebRequest.Method = "POST"
HttpWebResponse httpResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();

person Vijay H    schedule 26.08.2020    source แหล่งที่มา
comment
คุณสามารถทำงานนี้ในบุรุษไปรษณีย์ได้ไหม? คุณได้รับเอกสารจากผู้เขียนสำหรับการบริการหรือไม่? เหตุใดคุณจึงใช้ webrequest ไม่ใช่ HttpClient มีกรณีการใช้งานเฉพาะหรือไม่   -  person TheGeneral    schedule 26.08.2020
comment
ฉันได้ตรวจสอบสิ่งนี้ในเครื่องมือบุรุษไปรษณีย์แล้ว ซึ่งฉันได้รับคำตอบที่ถูกต้อง และฉันก็ลองใช้ HttpClient แล้วฉันก็ประสบปัญหาเดียวกัน @MichaelRandall   -  person Vijay H    schedule 26.08.2020
comment
คุณได้ลองเปลี่ยน ServicePointManager.SecurityProtocol แล้วหรือยัง   -  person TheGeneral    schedule 26.08.2020
comment
ใช่ ฉันลองใช้ SS3,Tls,Tls11,Tls12 แล้ว แต่ก็ยังไม่มีประโยชน์ @MichaelRandall   -  person Vijay H    schedule 26.08.2020
comment
นี่อาจเป็นปัญหากับคำขอ HttpWebRequest คุณสามารถลองเพิ่มการอ้างอิงบริการเพื่อเรียกใช้บริการแทนการสร้างคำขอ http โดยตรง   -  person Ding Peng    schedule 28.08.2020


คำตอบ (1)


รหัสข้างต้นนั้นใช้ได้อย่างสมบูรณ์ แต่ปัญหานี้เกิดจากสาเหตุอื่น

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

สาเหตุ :

ตามค่าเริ่มต้นขีดจำกัดในการใช้งาน Schannel คือ 32768 ไบต์ เมื่อถึงขีดจำกัดสูงสุดแล้ว ข้อผิดพลาดดังกล่าวจะกลับคืนมาในขณะที่มีการจับมือกันระหว่างบริการ

ความละเอียด :

  1. เพิ่ม MessageLimitClient จากค่าเริ่มต้น 0x8000 เป็นสูงสุด 0xf000 ด้วยคีย์รีจิสทรี HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel\Messaging

  2. สร้างคีย์ การส่งข้อความ หากไม่มีอยู่

  3. จากนั้นสร้าง DWORD ใหม่โดยตั้งชื่อเป็น 'MessageLimitClient' และตั้งค่า Valuedata เป็น 'f000' (เลขฐานสิบหก)

  4. หลังจากเปลี่ยนค่านี้แล้ว ให้รีสตาร์ทเซิร์ฟเวอร์เพื่อให้มีผลกับค่าใหม่

ป้อนคำอธิบายรูปภาพที่นี่

person Vijay H    schedule 31.08.2020
comment
น่าเสียดายที่โซลูชันนี้ไม่ได้ช่วยในกรณีของฉัน (อย่างน้อยก็ไม่ต้องรีสตาร์ท) แต่มีปัญหาในคำอธิบาย ที่ 1: ฉันไม่มีรหัส Messaging ในรีจิสทรี ประการที่ 2: ในคำอธิบายข้อความเขียนว่า MaxLimitClient แต่บนรูปภาพเขียนว่า MessageLimitClient - person Julo; 07.09.2020
comment
แก้ไขแล้ว หากคุณไม่มีข้อความ คุณจะต้องสร้างมันขึ้นมา ฉันพูดถึงมัน - person Vijay H; 09.09.2020
comment
ฉันได้เพิ่มรหัสแล้ว (ทั้งเก่าและใหม่) แต่น่าเสียดายที่มันไม่ได้ช่วยฉันในการแก้ไขข้อผิดพลาด ตอนนี้ฉันกำลังแก้ไขปัญหาโดยใช้ Python เป็นตัวอ่านคำขอ HTTP - person Julo; 09.09.2020
comment
มีสาเหตุหลายประการที่ทำให้เกิดปัญหาเดียวกัน ในกรณีของคุณสาเหตุคือสิ่งอื่นอาจเป็น @Julo - person Vijay H; 09.09.2020