Cách xử lý chứng chỉ SSL trong Selenium

⚡ Tóm tắt thông minh

Lỗi chứng chỉ SSL gây cản trở quá trình... Selenium Kiểm tra thời điểm trình duyệt từ chối chứng chỉ không đáng tin cậy hoặc đã hết hạn, vì vậy mỗi tập lệnh WebDriver cần có khả năng dành riêng cho trình duyệt để chấp nhận chứng chỉ và cho phép quá trình tự động hóa tiếp tục.

  • 🔘 Định nghĩa: SSL mã hóa lưu lượng truy cập giữa trình duyệt và máy chủ, và chứng chỉ xác thực danh tính của máy chủ.
  • ☑️ Nguyên nhân gây lỗi: Trình duyệt sẽ chặn các chứng chỉ không đáng tin cậy, đã hết hạn, bị thu hồi hoặc tự ký và hiển thị trang cảnh báo.
  • ✅ Firefox: A Firefox Các thiết lập cấu hình setAcceptUntrustedCertificates và setAssumeUntrustedCertificateIssuer được đặt trước khi trình điều khiển khởi chạy.
  • 🧪 Chrome: DesiredCapabilities với ACCEPT_SSL_CERTS chấp nhận chứng chỉ trên Selenium 2 và Selenium 3.
  • 🛠️ Trình duyệt web IE: A JavaViệc nhấp chuột vào phần tử overridelink bằng script sẽ bỏ qua trang cảnh báo.
  • ⚠️ Selenium 4: Đặt tùy chọn chấp nhận chứng chỉ không an toàn cho ChromeOptions. FirefoxOptions hoặc EdgeOptions thay thế DesiredCapabilities.

Cách xử lý chứng chỉ SSL trong Selenium

Chứng chỉ SSL ở Selenium

SSL (Lớp cổng bảo mật) là giao thức bảo mật tiêu chuẩn để thiết lập kết nối an toàn giữa máy chủ và máy khách là trình duyệt.

Chứng chỉ SSL bảo vệ dữ liệu truyền tải giữa máy chủ và ứng dụng khách bằng mã hóa mạnh và chữ ký số. Chủ sở hữu trang web cài đặt chứng chỉ SSL hoặc chứng chỉ ký mã.

Lợi ích của chứng chỉ SSL

Có một số lợi ích của việc sử dụng chứng chỉ SSL như,

  • Người ta có thể tăng sự tin tưởng của người dùng và khách hàng để thúc đẩy sự phát triển của doanh nghiệp một cách nhanh chóng
  • Các chứng chỉ này giúp bảo mật các giao dịch trực tuyến và thông tin nhạy cảm của khách hàng như dữ liệu thẻ tín dụng/thẻ ghi nợ, v.v.
  • Chứng chỉ ký có xu hướng nhận được số lượt tải xuống tối đa và đánh giá tốt từ người dùng.

Các trang web được bảo mật SSL bắt đầu bằng https:// và bạn có thể thấy biểu tượng khóa hoặc thanh địa chỉ màu xanh lục nếu kết nối được thiết lập an toàn.

Ví dụ: nếu bạn muốn thực hiện một số giao dịch qua ngân hàng trực tuyến hoặc muốn mua một Số Điện Thoại điện thoại thông qua trang thương mại điện tử như Flipkart hoặc Amazon.

Điều gì xảy ra giữa Trình duyệt Web và Máy chủ

  1. Một trình duyệt cố gắng kết nối với một trang web được bảo mật bằng SSL. Trình duyệt yêu cầu máy chủ web tự nhận dạng
  2. Máy chủ gửi cho trình duyệt một bản sao chứng chỉ SSL của nó
  3. Trình duyệt xác minh xem chứng chỉ SSL có phải là chính hãng hay không. Nếu vậy, nó sẽ gửi tin nhắn đến máy chủ
  4. Máy chủ gửi lại xác nhận được ký điện tử để bắt đầu phiên mã hóa SSL
  5. Dữ liệu được mã hóa được chia sẻ giữa máy chủ và trình duyệt

Số thẻ và thông tin đăng nhập được truyền qua phiên giao dịch đó, vì vậy quá trình trao đổi phải được mã hóa từ đầu đến cuối và không thể bị chặn lại.

Ví dụ, biểu tượng ổ khóa và thanh địa chỉ bên dưới xác nhận rằng chứng chỉ đã được chấp nhận.

  1. Kiểu https://netbanking.hdfcbank.com/netbanking/ .
  2. Nhấn Enter.
  3. Bạn sẽ thấy thanh địa chỉ màu xanh lục trong trình duyệt như bên dưới: -

Thanh địa chỉ màu xanh lá cây trên trình duyệt hiển thị trang giao dịch ngân hàng trực tuyến HDFC được bảo mật bằng SSL.

Chứng chỉ SSL tạo kết nối an toàn như thế nào

Sơ đồ bên dưới tracĐó là cái bắt tay, và các bước được đánh số tiếp theo giải thích từng bước trao đổi.

Sơ đồ quá trình bắt tay SSL giữa trình duyệt web và máy chủ web.

  1. trình duyệt gửi yêu cầu HTTPS đến máy chủ.
  2. Bây giờ Máy chủ phải cung cấp một số nhận dạng cho Trình duyệt để chứng minh rằng nó đáng tin cậy. Điều này có thể được thực hiện bằng cách gửi bản sao chứng chỉ SSL của nó tới trình duyệt.
  3. Mỗi trình duyệt có danh sách CA đáng tin cậy riêng. Trình duyệt kiểm tra gốc chứng chỉ dựa trên danh sách CA đáng tin cậy của nó và chứng chỉ đó chưa hết hạn, chưa bị thu hồi và tên chung có hợp lệ cho trang web mà nó đang kết nối hay không.
  4. Nếu trình duyệt tin cậy chứng chỉ thì một phiên mã hóa sẽ được tạo giữa máy chủ và trình duyệt.
  5. Máy chủ và Trình duyệt có thể gửi tin nhắn được mã hóa

Các loại chứng chỉ SSL

Trình duyệt và máy chủ sử dụng cơ chế Chứng chỉ SSL để có thể thiết lập kết nối an toàn. Kết nối này liên quan đến việc xác minh ba loại chứng chỉ.

  • Chân răng
  • Trung cấp
  • Chứng chỉ máy chủ

Quy trình nhận chứng chỉ SSL

Quá trình nhận chứng chỉ SSL bao gồm các bước dưới đây: -

  1. Trước tiên, bạn phải tạo yêu cầu CSR (tạo Yêu cầu ký chứng chỉ).
  2. Yêu cầu CSR tạo tệp dữ liệu CSR, tệp này được gửi đến nhà phát hành chứng chỉ SSL được gọi là CA (Cơ quan cấp chứng chỉ).
  3. CA sử dụng tệp dữ liệu CSR để tạo chứng chỉ SSL cho máy chủ của bạn.
  4. Sau khi nhận được chứng chỉ SSL, bạn phải cài đặt nó trên máy chủ của mình.
  5. Cũng cần phải cài đặt chứng chỉ trung gian để liên kết chứng chỉ SSL của bạn với chứng chỉ gốc của CA.

Hình ảnh dưới đây đại diện cho cả ba chứng chỉ- Chứng chỉ gốc, trung gian và máy chủ.

Chuỗi chứng chỉ hiển thị các chứng chỉ SSL gốc, trung gian và máy chủ.

Cách xác minh chứng chỉ SSL

SSL hoạt động thông qua sự kết hợp của các chương trình và quy trình mã hóa/giải mã tồn tại trên máy tính của máy chủ web và trình duyệt máy chủ web.

Chứng chỉ SSL về cơ bản chứa thông tin bên dưới.

  1. Chủ đề là danh tính của chủ sở hữu trang web.
  2. Thông tin hợp lệ - khóa công khai và khóa riêng.

Khóa riêng và khóa công khai là hai khóa mã hóa (số) có mối liên hệ duy nhất với nhau. Bất cứ thứ gì được mã hóa bằng khóa công khai chỉ có thể được giải mã bằng khóa riêng. Trình duyệt sẽ hiển thị các trường này khi kiểm tra chứng chỉ, như hình bên dưới.

Bảng chi tiết chứng chỉ hiển thị đối tượng, thời hạn hiệu lực và khóa công khai.

Khi kết nối an toàn không được thiết lập giữa máy chủ và máy khách do chứng chỉ, lỗi chứng chỉ SSL sau đây sẽ xuất hiện.

Các loại lỗi chứng chỉ SSL

Giả sử bạn nhập một yêu cầu HTTPS và trình duyệt trả lời bằng "Kết nối này không đáng tin cậy" hoặc "Chứng chỉ bảo mật của trang web không đáng tin cậy". Trình duyệt không thể thiết lập kết nối an toàn với chứng chỉ được cung cấp, vì vậy nó dừng lại và yêu cầu người dùng thực hiện hành động thích hợp.

Các loại lỗi bạn có thể gặp do chứng chỉ trong các trình duyệt khác nhau có thể giống như thế này

  1. LửaFox - Kết nối này không đáng tin
  2. Google Chrome – Trang web này không đáng tin cậy về mặt bảo mật.
  3. Internet Explorer (IE) – Chứng chỉ bảo mật do trang web này trình bày không được cơ quan cấp chứng chỉ đáng tin cậy (CA) tin cậy

Ảnh chụp màn hình bên dưới hiển thị đoạn mã xen kẽ do chứng chỉ không đáng tin cậy tạo ra.

Trang cảnh báo kết nối không đáng tin cậy hiển thị trên trình duyệt do chứng chỉ SSL không hợp lệ.

Cách xử lý lỗi chứng chỉ SSL bằng cách sử dụng Selenium webdriver

Giả sử kịch bản thử nghiệm Nó truy cập vào trang "Kết nối không đáng tin cậy" ở trên. Cần phải điều chỉnh kịch bản để nó tự xử lý ngoại lệ SSL, hoàn toàn thông qua... tự động hóa.

Sự thay đổi phụ thuộc vào phiên bản trình duyệt đang được sử dụng, và đây là lúc các khả năng mong muốn phát huy tác dụng. Khả năng mong muốn cấu hình phiên bản trình điều khiển của Selenium Webdriver, bao gồm ChromeDriver, FirefoxTrình điều khiển và Internet Explorer.

Các bước dưới đây có thể được thêm vào Selenium Đoạn mã này dùng để khắc phục tình trạng "Kết nối không đáng tin cậy" cho từng trình duyệt.

⚠️ Selenium Ghi chú năm 4: Lớp DesiredCapabilities đã bị xóa bỏ trong Selenium 4. Các lớp Tùy chọn của trình duyệt giờ đây truyền tải cùng một thiết lập thông qua một khả năng duy nhất của W3C. chấp nhận chứng chỉ không an toàn.

trình duyệt Selenium 4 lớp Gọi số
cơ rôm Tùy chọn Chrome setAcceptInsecureCerts(true)
Firefox FirefoxTùy chọn setAcceptInsecureCerts(true)
Cạnh Tùy chọn cạnh setAcceptInsecureCerts(true)
Safari JavascriptCông chức kịch bản bỏ qua tạm thời
ChromeOptions options = new ChromeOptions();
options.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(options);

Xử lý lỗi chứng chỉ SSL trong Firefox

Để xử lý lỗi chứng chỉ SSL trong Firefox, chúng ta cần sử dụng các khả năng mong muốn của Selenium Webdriver và làm theo các bước sau.

Bước 1) Đầu tiên chúng ta cần tạo một cái mới Firefox Hồ sơ Nói "thông tin của tôi".

Bước 2) Bây giờ hãy truy cập myProfile trong tập lệnh như bên dưới và tạo FirefoxĐối tượng hồ sơ.

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

Bước 3) Bây giờ chúng ta cần thiết lập các thuộc tính “setAcceptUntrustedCertificates” và “setAssumeUntrustedCertificateIssuer” trong Fire. Fox Hồ sơ.

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

Bước 4) Bây giờ hãy sử dụng LửaFox hồ sơ trong LửaFox đối tượng điều khiển.

WebDriver driver = new FirefoxDriver (ffProfile)

Lưu ý: "setAcceptUntrustedCertificates" và "setAssumeUntrustedCertificateNhà phát hành“là các khả năng xử lý lỗi chứng chỉ trong trình duyệt web.

⚠️ Lưu ý về phiên bản: Đoạn mã dựa trên hồ sơ ở trên nhắm mục tiêu Selenium 2 và Selenium 3. Bật Selenium 4. Hồ sơ được đính kèm thông qua FirefoxCác lựa chọn và Firefox Mặc định chấp nhận các chứng chỉ không an toàn.

Xử lý lỗi chứng chỉ SSL trong Chrome

Để xử lý lỗi SSL trong Chrome, đối tượng DesiredCapabilities bên dưới chấp nhận mọi chứng chỉ SSL, do đó người dùng sẽ không thấy cảnh báo chứng chỉ nào trong quá trình chạy.

Chúng ta cần tạo phiên bản của lớp DesiredCapabilities như sau: -

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

⚠️ Lưu ý về phiên bản: CapabilityType.ACCEPT_SSL_CERTS thuộc về giao thức JSON Wire Protocol cũ. Hãy thay thế nó bằng đoạn mã ChromeOptions đã hiển thị trước đó khi chạy. Selenium 4.

Xử lý lỗi chứng chỉ SSL trong IE

Không giống như việc xử lý chứng chỉ SSL trong trình duyệt Chrome và Firefox, trong IE, bạn có thể phải xử lý nó bằng cách sử dụng javascript.

Để xử lý chứng chỉ SSL trong IE, bạn có thể giải quyết tình huống này theo hai cách.

Phương pháp 1) Nhấp vào liên kết “Tiếp tục truy cập trang web này (không khuyến nghị)” trên cửa sổ trung gian. Liên kết đó có ID là “overridelink”, bạn có thể xác nhận ID này trong ngăn HTML được mở bằng phím F12, như ảnh chụp màn hình bên dưới.

Cảnh báo chứng chỉ của Internet Explorer với liên kết ghi đè "Tiếp tục truy cập trang web này".

Nhấp vào liên kết bằng phương thức driver.navigate() với JavaNội dung kịch bản như sau:

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

Phương pháp 2) Phương pháp thứ hai khá giống với mã xử lý SSL của Chrome.

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

Đoạn mã trên sẽ giúp xử lý lỗi chứng chỉ SSL trong IE.

⚠️ Lưu ý về phiên bản: Internet Explorer 11 đã ngừng hoạt động vào tháng 6 năm 2022. Hãy thử lại với cùng một trình duyệt. Microsoft Edge Với EdgeOptions, hoặc chạy Edge ở chế độ IE nếu ứng dụng cũ vẫn yêu cầu điều đó.

Câu Hỏi Thường Gặp

Dự án Chromium hoạt động badssl.com, nơi cung cấp các tên miền phụ đã hết hạn, tự ký, bị thu hồi và có máy chủ sai. Hãy trỏ một tập lệnh kiểm thử đến expired.badssl.com để tái tạo lỗi chứng chỉ thực tế một cách an toàn.

STT Selenium Phiên bản 4 đã loại bỏ nó và thay thế bằng các lớp Tùy chọn của trình duyệt. Hãy xây dựng một ChromeOptions. FirefoxĐối tượng Options hoặc EdgeOptions, gọi setAcceptInsecureCerts(true) và truyền nó vào hàm tạo của trình điều khiển.

Tạo một đối tượng EdgeOptions, gọi setAcceptInsecureCerts(true) và truyền nó vào hàm tạo EdgeDriver. Mẫu này khớp với Chrome vì cả hai trình duyệt đều sử dụng công cụ Chromium.

SafariDriver không có tùy chọn chấp nhận chứng chỉ không an toàn. Hãy sử dụng... JavascriptHàm thực thi CertificateWarningController.visitInsecureWebsiteWithTemporaryBypass(), hàm này sẽ xóa cửa sổ trung gian chỉ trong phiên đó.

ERR_CERT_DATE_INVALID đánh dấu chứng chỉ đã hết hạn, ERR_CERT_REVOKED đánh dấu chứng chỉ đã bị thu hồi và ERR_CERT_AUTHORITY_INVALID đánh dấu chứng chỉ tự ký hoặc do tổ chức phát hành không đáng tin cậy cấp. Mã lỗi này sẽ chỉ rõ nguyên nhân trước khi bạn thay đổi bất kỳ đoạn mã nào.

Máy học nhóm các lỗi chứng chỉ theo mã lỗi và máy chủ, phân tách chứng chỉ thử nghiệm hết hạn khỏi lỗi thực sự. Việc nhóm này giúp ngăn chặn việc một sự cố môi trường bị ghi nhận thành nhiều lỗi kiểm thử không liên quan.

Vâng. Trợ lý GitHub Soạn thảo đối tượng Options và hàm tạo trình điều khiển từ một bình luận, nhưng hãy kiểm tra xem nó có đề xuất setAcceptInsecureCerts thay vì lệnh gọi DesiredCapabilities đã bị xóa hay không.

Chỉ áp dụng trên môi trường thử nghiệm. Việc chấp nhận tất cả các chứng chỉ sẽ che giấu các lỗi về thời hạn hiệu lực, tên máy chủ và chuỗi chứng chỉ, vì vậy hãy loại bỏ cờ này khỏi các bài kiểm tra sơ bộ trên môi trường sản xuất và chỉ xác nhận chứng chỉ một cách rõ ràng khi kiểm tra bảo mật.

Tóm tắt bài viết này với: