วิธีจัดการใบรับรอง SSL ใน Selenium

⚡ สรุปอย่างชาญฉลาด

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

  • 🔘 ความหมาย: SSL เข้ารหัสการรับส่งข้อมูลระหว่างเบราว์เซอร์และเซิร์ฟเวอร์ และใบรับรองจะพิสูจน์ตัวตนของเซิร์ฟเวอร์
  • ☑️ สาเหตุของข้อผิดพลาด: เบราว์เซอร์จะบล็อกใบรับรองที่ไม่น่าเชื่อถือ หมดอายุ ถูกเพิกถอน หรือลงนามด้วยตนเอง และแสดงหน้าคำเตือน
  • Firefox: A Firefox โปรไฟล์จะตั้งค่า setAcceptUntrustedCertificates และ setAssumeUntrustedCertificateIssuer ก่อนที่ไดรเวอร์จะเริ่มทำงาน
  • 🧪 โครเมี่ยม: DesiredCapabilities ที่มี ACCEPT_SSL_CERTS จะยอมรับใบรับรองบน Selenium 2 และ Selenium 3.
  • 🛠️ Internet Explorer: A Javaสคริปต์จะคลิกองค์ประกอบ overridelink เพื่อข้ามหน้าคำเตือน
  • ⚠️ Selenium 4: setAcceptInsecureCerts ใน ChromeOptions FirefoxOptions หรือ EdgeOptions จะมาแทนที่ DesiredCapabilities

วิธีจัดการใบรับรอง SSL ใน Selenium

ใบรับรอง SSL ใน Selenium

SSL (Secure Sockets Layer) เป็นโปรโตคอลความปลอดภัยมาตรฐานสำหรับการสร้างการเชื่อมต่อที่ปลอดภัยระหว่างเซิร์ฟเวอร์และไคลเอนต์ซึ่งเป็นเบราว์เซอร์

ใบรับรอง SSL ช่วยปกป้องข้อมูลที่ส่งผ่านระหว่างเซิร์ฟเวอร์และแอปพลิเคชันไคลเอ็นต์ด้วยการเข้ารหัสที่แข็งแกร่งและลายเซ็นดิจิทัล เจ้าของเว็บไซต์สามารถติดตั้งใบรับรอง SSL หรือใบรับรองการลงนามรหัสได้

ประโยชน์ของใบรับรอง SSL

การใช้ใบรับรอง SSL มีประโยชน์หลายประการ เช่น

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

เว็บไซต์ที่มีการรักษาความปลอดภัย SSL เริ่มต้นด้วย https:// และคุณจะเห็นไอคอนแม่กุญแจหรือแถบที่อยู่สีเขียวหากทำการเชื่อมต่ออย่างปลอดภัย

เช่น หากคุณต้องการทำธุรกรรมผ่านเน็ตแบงก์กิ้ง หรือต้องการซื้อก โทรศัพท์มือถือ โทรศัพท์ผ่านไซต์อีคอมเมิร์ซเช่น Flipkart หรือ Amazon.

จะเกิดอะไรขึ้นระหว่างเว็บเบราว์เซอร์และเซิร์ฟเวอร์

  1. เบราว์เซอร์พยายามเชื่อมต่อกับเว็บไซต์ที่ปลอดภัยด้วย SSL เบราว์เซอร์ขอให้เว็บเซิร์ฟเวอร์ระบุตัวเอง
  2. เซิร์ฟเวอร์ส่งสำเนาใบรับรอง SSL ให้เบราว์เซอร์
  3. เบราว์เซอร์จะตรวจสอบว่าใบรับรอง SSL เป็นของแท้หรือไม่ หากเป็นเช่นนั้น ระบบจะส่งข้อความไปยังเซิร์ฟเวอร์
  4. เซิร์ฟเวอร์จะส่งการตอบรับที่ลงนามแบบดิจิทัลกลับไปเพื่อเริ่มเซสชันที่เข้ารหัส SSL
  5. ข้อมูลที่เข้ารหัสจะถูกแชร์ระหว่างเซิร์ฟเวอร์และเบราว์เซอร์

หมายเลขบัตรและข้อมูลการเข้าสู่ระบบจะถูกส่งผ่านเซสชันนั้น ดังนั้นการแลกเปลี่ยนข้อมูลจึงต้องได้รับการเข้ารหัสแบบ end-to-end และไม่สามารถถูกดักฟังได้

ตัวอย่างเช่น สัญลักษณ์แม่กุญแจและแถบที่อยู่ด้านล่างยืนยันว่าใบรับรองได้รับการยอมรับแล้ว

  1. ประเภท https://netbanking.hdfcbank.com/netbanking/ .
  2. กด Enter
  3. คุณจะเห็นแถบที่อยู่สีเขียวในเบราว์เซอร์ดังนี้:-

แถบที่อยู่สีเขียวในเบราว์เซอร์สำหรับหน้าเว็บ HDFC Net Banking ที่ได้รับการรักษาความปลอดภัยด้วย SSL

ใบรับรอง SSL สร้างการเชื่อมต่อที่ปลอดภัยอย่างไร

แผนภาพด้านล่าง tracนั่นคือการจับมือ และขั้นตอนที่มีหมายเลขกำกับต่อไปนี้จะอธิบายการแลกเปลี่ยนแต่ละครั้ง

แผนภาพแสดงการเชื่อมต่อ SSL ระหว่างเว็บเบราว์เซอร์และเว็บเซิร์ฟเวอร์

  1. เบราว์เซอร์ ส่งคำขอ HTTPS ไปยังเซิร์ฟเวอร์
  2. ตอนนี้เซิร์ฟเวอร์จะต้องระบุตัวตนบางอย่างให้กับเบราว์เซอร์เพื่อพิสูจน์ว่าเชื่อถือได้ ซึ่งสามารถทำได้โดยการส่งสำเนาใบรับรอง SSL ไปยังเบราว์เซอร์
  3. เบราว์เซอร์แต่ละตัวมีรายการ Trusted CA's ของตัวเอง เบราว์เซอร์ตรวจสอบรากใบรับรองกับรายการ CA ที่เชื่อถือได้ และตรวจสอบว่าใบรับรองยังไม่หมดอายุ ไม่ถูกเพิกถอน และชื่อทั่วไปนั้นถูกต้องสำหรับเว็บไซต์ที่เชื่อมต่ออยู่
  4. หากเบราว์เซอร์เชื่อถือใบรับรอง เซสชันที่เข้ารหัสจะถูกสร้างขึ้นระหว่างเซิร์ฟเวอร์และเบราว์เซอร์
  5. เซิร์ฟเวอร์และเบราว์เซอร์สามารถส่งข้อความที่เข้ารหัสได้

ประเภทของใบรับรอง SSL

เบราว์เซอร์และเซิร์ฟเวอร์ใช้กลไกใบรับรอง SSL เพื่อให้สามารถสร้างการเชื่อมต่อที่ปลอดภัยได้ การเชื่อมต่อนี้เกี่ยวข้องกับการตรวจสอบใบรับรองสามประเภท

  • ราก
  • Intermediate
  • ใบรับรองเซิร์ฟเวอร์

ขั้นตอนการรับใบรับรอง SSL

กระบวนการรับใบรับรอง SSL มีขั้นตอนด้านล่าง:-

  1. ขั้นแรก คุณต้องสร้างคำขอ CSR (สร้างคำขอลงนามใบรับรอง)
  2. คำขอ CSR สร้างไฟล์ข้อมูล CSR ซึ่งถูกส่งไปยังผู้ออกใบรับรอง SSL ที่เรียกว่า CA (Certificate Authority)
  3. CA ใช้ไฟล์ข้อมูล CSR เพื่อสร้างใบรับรอง SSL สำหรับเซิร์ฟเวอร์ของคุณ
  4. หลังจากได้รับใบรับรอง SSL แล้ว คุณต้องติดตั้งใบรับรองนั้นบนเซิร์ฟเวอร์ของคุณ
  5. จำเป็นต้องติดตั้งใบรับรองระดับกลางด้วย ซึ่งจะเชื่อมโยงใบรับรอง SSL ของคุณกับใบรับรองหลักของ CA

ภาพด้านล่างแสดงถึงใบรับรองทั้งสามใบ- ใบรับรองหลัก ระดับกลาง และเซิร์ฟเวอร์

ลำดับใบรับรองที่แสดงใบรับรอง SSL ระดับราก ระดับกลาง และระดับเซิร์ฟเวอร์

วิธีการตรวจสอบใบรับรอง SSL

SSL ทำงานผ่านการผสมผสานระหว่างโปรแกรมและรูทีนการเข้ารหัส/ถอดรหัสที่มีอยู่บนเว็บเซิร์ฟเวอร์คอมพิวเตอร์และเว็บเซิร์ฟเวอร์เบราว์เซอร์

โดยทั่วไปใบรับรอง SSL จะมีข้อมูลด้านล่าง

  1. เรื่องที่เป็นตัวตนของเจ้าของเว็บไซต์
  2. ข้อมูลความถูกต้อง - กุญแจสาธารณะและกุญแจส่วนตัว

กุญแจส่วนตัวและกุญแจสาธารณะเป็นกุญแจเข้ารหัสลับ (ตัวเลข) สองตัวที่มีความสัมพันธ์กันอย่างเฉพาะเจาะจง สิ่งใดก็ตามที่ถูกเข้ารหัสด้วยกุญแจสาธารณะ จะสามารถถอดรหัสได้ด้วยกุญแจส่วนตัวเท่านั้น เบราว์เซอร์จะแสดงฟิลด์เหล่านั้นเมื่อตรวจสอบใบรับรอง ดังที่แสดงด้านล่าง

หน้าต่างรายละเอียดใบรับรอง แสดงหัวเรื่อง ระยะเวลาที่ใช้ได้ และรหัสสาธารณะ

หากไม่สามารถสร้างการเชื่อมต่อที่ปลอดภัยระหว่างเซิร์ฟเวอร์และไคลเอนต์เนื่องจากใบรับรอง ข้อผิดพลาดใบรับรอง SSL ต่อไปนี้จะปรากฏขึ้น

ประเภทของข้อผิดพลาดใบรับรอง SSL

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

ประเภทของข้อผิดพลาดที่คุณน่าจะเห็นเนื่องจากใบรับรองในเบราว์เซอร์ต่างๆ อาจเป็นเช่นนี้

  1. ธรรมชาติFox - การเชื่อมต่อนี้ไม่น่าเชื่อถือ
  2. Google Chrome – ระบบรักษาความปลอดภัยของเว็บไซต์นี้ไม่น่าเชื่อถือ
  3. อินเตอร์เน็ตเอ็กซ์พลอเรอร์ (IE) – ใบรับรองความปลอดภัยที่แสดงโดยเว็บไซต์นี้ไม่ได้รับความเชื่อถือจากผู้ออกใบรับรองที่เชื่อถือได้ (CA)

ภาพหน้าจอด้านล่างแสดงข้อความแทรกที่เกิดจากใบรับรองที่ไม่น่าเชื่อถือ

หน้าแจ้งเตือนการเชื่อมต่อที่ไม่น่าเชื่อถือปรากฏขึ้นในเบราว์เซอร์เนื่องจากใบรับรอง SSL ไม่ถูกต้อง

วิธีจัดการกับข้อผิดพลาดใบรับรอง SSL โดยใช้ Selenium ไดรเวอร์เว็บ

สมมติว่าไฟล์ สคริปต์ทดสอบ เมื่อพบหน้า "การเชื่อมต่อที่ไม่น่าเชื่อถือ" ด้านบน สคริปต์จะต้องได้รับการปรับแต่งเพื่อให้จัดการกับข้อยกเว้น SSL ด้วยตัวเอง โดยใช้เพียงวิธีเดียว อัตโนมัติ.

การเปลี่ยนแปลงขึ้นอยู่กับอินสแตนซ์ของเบราว์เซอร์ที่ใช้งานอยู่ และนี่คือจุดที่ Desired Capabilities เข้ามามีบทบาท Desired Capabilities จะกำหนดค่าอินสแตนซ์ของไดรเวอร์ของเบราว์เซอร์ Selenium Webdriver รวมถึง ChromeDriver Firefoxไดรเวอร์และอินเทอร์เน็ตเอ็กซ์พลอเรอร์

ขั้นตอนด้านล่างนี้สามารถเพิ่มเข้าไปได้ Selenium สคริปต์สำหรับแก้ไขสถานการณ์ "การเชื่อมต่อที่ไม่น่าเชื่อถือ" สำหรับแต่ละเบราว์เซอร์

⚠️ Selenium หมายเหตุปี 4: คลาส DesiredCapabilities ถูกลบออกไปแล้วใน Selenium 4. ขณะนี้คลาสตัวเลือกของเบราว์เซอร์จะส่งการตั้งค่าเดียวกันผ่านความสามารถของ W3C เพียงอย่างเดียว ยอมรับใบรับรองที่ไม่ปลอดภัย.

เบราว์เซอร์ Selenium ชั้น 4 โทร
Chrome ตัวเลือก Chrome setAcceptInsecureCerts(true)
Firefox Firefoxตัวเลือก setAcceptInsecureCerts(true)
ขอบ ตัวเลือกขอบ setAcceptInsecureCerts(true)
Safari Javascriptผู้ปฏิบัติการ สคริปต์บายพาสชั่วคราว
ChromeOptions options = new ChromeOptions();
options.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(options);

การจัดการข้อผิดพลาดใบรับรอง SSL ใน Firefox

สำหรับการจัดการข้อผิดพลาดใบรับรอง SSL ใน Firefoxเราจำเป็นต้องใช้ความสามารถที่ต้องการของ Selenium Webdriver และทำตามขั้นตอนต่อไปนี้

ขั้นตอน 1) ขั้นแรกเราต้องสร้างสิ่งใหม่ Firefox โปรไฟล์ พูด "ประวัติของฉัน"

ขั้นตอน 2) ตอนนี้เข้าถึง myProfile ในสคริปต์ด้านล่างและสร้าง Firefoxวัตถุโปรไฟล์

ProfilesIni prof = new ProfilesIni()				
FirefoxProfile ffProfile= prof.getProfile ("myProfile")

ขั้นตอน 3) ตอนนี้เราต้องตั้งค่าคุณสมบัติ “setAcceptUntrustedCertificates” และ “setAssumeUntrustedCertificateIssuer” ใน Fire Fox โปรไฟล์

ffProfile.setAcceptUntrustedCertificates(true) 
ffProfile.setAssumeUntrustedCertificateIssuer(false)

ขั้นตอน 4) ตอนนี้ใช้ไฟFox โปรไฟล์ในไฟFox วัตถุไดรเวอร์

WebDriver driver = new FirefoxDriver (ffProfile)

หมายเหตุ "setAcceptUntrustedCertificates" และ "setAssumeUntrustedCertificateIssuer“คือความสามารถในการจัดการข้อผิดพลาดเกี่ยวกับใบรับรองในเว็บเบราว์เซอร์”

⚠️ หมายเหตุเกี่ยวกับเวอร์ชัน: โค้ดข้างต้นที่อิงตามโปรไฟล์กำหนดเป้าหมายไปที่ Selenium 2 และ Selenium 3. เปิด Selenium 4. โปรไฟล์ถูกแนบผ่าน Firefoxตัวเลือก และ Firefox โดยค่าเริ่มต้นจะยอมรับใบรับรองที่ไม่ปลอดภัย

การจัดการข้อผิดพลาดใบรับรอง SSL ใน Chrome

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

เราจำเป็นต้องสร้างอินสแตนซ์ของคลาส DesiredCapabilities ดังนี้:-

DesiredCapabilities handlSSLErr = DesiredCapabilities.chrome ()       
handlSSLErr.setCapability (CapabilityType.ACCEPT_SSL_CERTS, true)
WebDriver driver = new ChromeDriver (handlSSLErr);

⚠️ หมายเหตุเกี่ยวกับเวอร์ชัน: CapabilityType.ACCEPT_SSL_CERTS เป็นของโปรโตคอล JSON Wire แบบเก่า ให้แทนที่ด้วยโค้ด ChromeOptions ที่แสดงไว้ก่อนหน้านี้เมื่อเรียกใช้งาน Selenium 4.

การจัดการข้อผิดพลาดใบรับรอง SSL ใน IE

ไม่เหมือนการจัดการใบรับรอง SSL ในเบราว์เซอร์ Chrome และ Firefoxใน IE คุณอาจต้องจัดการโดยใช้วิธีอื่น JavaScript.

ในการจัดการใบรับรอง SSL ใน IE คุณสามารถทำได้สองวิธี

วิธีที่ 1) คลิกที่ลิงก์ “ดำเนินการต่อที่เว็บไซต์นี้ (ไม่แนะนำ)” ในหน้าต่างป๊อปอัพ ลิงก์นั้นมี ID “overridelink” ซึ่งคุณสามารถตรวจสอบได้ในหน้าต่าง HTML ที่เปิดขึ้นโดยการกด F12 ดังที่แสดงในภาพหน้าจอด้านล่าง

ข้อความเตือนเกี่ยวกับใบรับรองของ Internet Explorer พร้อมลิงก์ "ดำเนินการต่อในเว็บไซต์นี้" เพื่อแทนที่ข้อความเดิม

คลิกที่ลิงค์โดยใช้วิธี driver.navigate() ด้วย Javaสคริปต์มีดังต่อไปนี้ :-

driver.navigate ().to ("javascript:document.getElementById('overridelink').click()");

วิธีที่ 2) วิธีที่สองค่อนข้างคล้ายกับโค้ดการจัดการ SSL ของ Chrome

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
System.setProperty("webdriver.ie.driver","IEDriverServer.exe");
WebDriver driver = new InternetExplorerDriver(capabilities);

รหัสด้านบนจะช่วยจัดการข้อผิดพลาดใบรับรอง SSL ใน IE

⚠️ หมายเหตุเกี่ยวกับเวอร์ชัน: Internet Explorer 11 ถูกยกเลิกการใช้งานในเดือนมิถุนายน 2022 ลองจำลองสถานการณ์เดียวกันนี้กับ... Microsoft Edge ด้วย EdgeOptions หรือใช้งาน Edge ในโหมด IE ในกรณีที่แอปพลิเคชันรุ่นเก่าบางตัวยังคงต้องการใช้งานโหมดนี้อยู่

คำถามที่พบบ่อย

โครงการ Chromium ดำเนินการอยู่ badssl.comซึ่งให้บริการโดเมนย่อยที่หมดอายุ ลงนามด้วยตนเอง ถูกเพิกถอน และโฮสต์ไม่ถูกต้อง ชี้สคริปต์ทดสอบไปที่ expired.badssl.com เพื่อจำลองความล้มเหลวของใบรับรองจริงได้อย่างปลอดภัย

ลำดับ Selenium 4 ลบออกแล้วใช้คลาส Options ของเบราว์เซอร์แทน สร้าง ChromeOptions ขึ้นมา Firefoxอ็อบเจ็กต์ Options หรือ EdgeOptions เรียกใช้ setAcceptInsecureCerts(true) และส่งอ็อบเจ็กต์นั้นไปยังคอนสตรัคเตอร์ของไดรเวอร์

สร้างอ็อบเจ็กต์ EdgeOptions เรียกใช้ setAcceptInsecureCerts(true) และส่งอ็อบเจ็กต์นั้นไปยังตัวสร้าง EdgeDriver รูปแบบนี้ตรงกับ Chrome เนื่องจากทั้งสองเบราว์เซอร์ใช้เอนจิน Chromium ร่วมกัน

SafariDriver ไม่มีตัวเลือก accept-insecure-certs ให้ใช้... Javascriptตัวดำเนินการจะเรียกใช้ CertificateWarningController.visitInsecureWebsiteWithTemporaryBypass() ซึ่งจะล้างโฆษณาคั่นระหว่างหน้าสำหรับเซสชันนั้นเท่านั้น

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

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

ใช่. นักบิน GitHub ร่างอ็อบเจ็กต์ Options และตัวสร้างไดรเวอร์จากความคิดเห็น แต่ตรวจสอบให้แน่ใจว่าแนะนำให้ใช้ setAcceptInsecureCerts แทนการเรียก DesiredCapabilities ที่ถูกลบออกไป

ใช้ได้เฉพาะในสภาพแวดล้อมทดสอบเท่านั้น การยอมรับใบรับรองทั้งหมดจะซ่อนข้อบกพร่องเกี่ยวกับการหมดอายุ ชื่อโฮสต์ และห่วงโซ่ใบรับรอง ดังนั้นควรปิดใช้งานแฟล็กนี้ในการทดสอบเบื้องต้นในสภาพแวดล้อมการใช้งานจริง และตรวจสอบใบรับรองอย่างชัดเจนเมื่อมีการทดสอบด้านความปลอดภัย

สรุปโพสต์นี้ด้วย: