Ca chứng chỉ trăn
Thư viện chuẩn Python bao gồm nhiều mô-đun cung cấp chức năng máy khách HTTP, bao gồm 0. Mặc dù các mô-đun này hỗ trợ kết nối HTTPS, nhưng theo truyền thống, chúng không thực hiện xác minh chứng chỉ do máy chủ HTTPS cung cấp và không cung cấp cách nào để dễ dàng kích hoạt xác minh đó. Điều này có thể cho phép kẻ tấn công Man-In-The-Middle (MITM) dễ dàng chiếm quyền điều khiển các kết nối HTTPS từ máy khách Python để nghe lén hoặc sửa đổi dữ liệu được truyền Show Việc thiếu xác minh chứng chỉ này đã được biết rõ và thường khắc phục trong các trường hợp sử dụng có liên quan bằng cách triển khai xác minh trong các ứng dụng hoặc bằng cách sử dụng các thư viện máy khách HTTP khác nhau đã thực hiện xác minh chứng chỉ. Các công cụ quản lý gói trong Red Hat Enterprise Linux có thể được sử dụng làm ví dụ. trình quản lý gói Yum được sử dụng trong Red Hat Enterprise Linux 5, 6 và 7 sử dụng mô-đun python-pycurl, một trình bao bọc xung quanh thư viện curl/libcurl, thực hiện xác minh chứng chỉ; Mặc dù giới hạn này đã được biết rõ nhưng nhiều tác giả ứng dụng không biết về nó hoặc cho rằng tất cả các kiểm tra dự kiến đã được thực hiện. Điều đó dẫn đến các báo cáo về một số lỗi bảo mật theo thời gian và việc gán CVE-2014-9365 do thiếu xác minh chứng chỉ trong các máy khách HTTP của thư viện chuẩn Python Nghị quyếtĐộ phân giải ngược dòngCác nhà phát triển ngược dòng Python đã quyết định giải quyết vấn đề bằng cách bật xác minh chứng chỉ theo mặc định. Thay đổi được triển khai thông qua Đề xuất cải tiến Python PEP 476 (Bật xác minh chứng chỉ theo mặc định cho máy khách http stdlib) và được áp dụng cho cả nhánh phát triển hiện tại trong phiên bản 3. 4. 3 và nhánh bảo trì kế thừa trong phiên bản 2. 7. 9. Đây là một thay đổi gây tranh cãi cho di sản 2. 7 vì nó được biết là có vấn đề tương thích ngược liên quan đến nó. Các triển khai cố ý hoặc vô ý dựa vào hành vi cũ thiếu bất kỳ xác minh nào sẽ bị hỏng khi sử dụng phiên bản Python cập nhật. Do đó, điều này có thể ngăn người dùng sử dụng các phiên bản Python đã vá lỗi Trong nỗ lực giải quyết các sự cố tương thích này và để cung cấp quá trình chuyển đổi mượt mà hơn sang các giá trị mặc định mới an toàn hơn, Red Hat đã làm việc với các thành viên cộng đồng Python để xác định các cơ chế cho phép người dùng và quản trị viên kiểm soát xem có nên thực hiện xác minh chứng chỉ hay không mà không yêu cầu sửa đổi các ứng dụng riêng lẻ. Các cơ chế đó được mô tả trong PEP 493 (Công cụ di chuyển xác minh HTTPS cho Python 2. 7) Red Hat Enterprise Linux 7 Độ phân giảiPhiên bản Python có trong Red Hat Enterprise Linux 7 dựa trên phiên bản ngược dòng 2. 7. 5 và do đó đã không thực hiện xác minh chứng chỉ. Hỗ trợ cho PEP 476 (cùng với PEP 466 bắt buộc (Cải tiến bảo mật mạng cho Python 2. 7. x)) lần đầu tiên được thêm qua RHSA-2015. 2101 được phát hành như một phần của Red Hat Enterprise Linux 7. 2 RHSA-2015. Bản cập nhật 2101 bổ sung hỗ trợ cho PEP 476, tuy nhiên vì lý do tương thích ngược, nó tắt xác minh chứng chỉ theo mặc định. Nó cũng thực hiện hỗ trợ cho tệp cấu hình 1 được mô tả trong phần "" của PEP 493. Với sự hỗ trợ này, xác minh chứng chỉ có thể được bật theo mặc địnhHỗ trợ cho PEP 493 trong Red Hat Enterprise Linux 7 đã được mở rộng thêm thông qua RHSA-2016. 2586 được phát hành như một phần của Red Hat Enterprise Linux 7. 3. Bản cập nhật thêm các tính năng sau
Xác minh chứng chỉ đã được bật theo mặc định qua RhSA-2017. 1868 được phát hành như một phần của Red Hat Enterprise Linux 7. 4. Các triển khai yêu cầu xác minh chứng chỉ vẫn bị vô hiệu hóa có thể thay đổi mặc định thông qua tệp cấu hình 1. Tham khảo phần "Kiểm soát xác minh chứng chỉ" bên dưới để biết thêm chi tiếtBộ sưu tập phần mềm Red HatPhiên bản Python được sử dụng trong bộ sưu tập 8 dựa trên phiên bản ngược dòng 3. 4. 2. Tuy nhiên, hỗ trợ PEP 476 đã được đưa vào phiên bản này và được đưa vào kể từ lần phát hành đầu tiên qua RHEA-2015. 1058, được phát hành như một phần của Red Hat Software Collections 2. 0, với xác minh chứng chỉ được bật theo mặc định. Nó không bao gồm bất kỳ hỗ trợ nào cho PEP 493 và do đó không thể tắt xác minh theo mặc định thông qua tệp cấu hình 1. Các mẹo khắc phục sự cố được lưu ý bên dưới cũng có thể áp dụng cho phiên bản nàyPhiên bản Python có trong bộ sưu tập 0 ban đầu dựa trên phiên bản ngược dòng 2. 7. 5 trở lên được cập nhật lên phiên bản ngược dòng 2. 7. 8 và do đó không thực hiện xác minh chứng chỉ. Hỗ trợ cho PEP 476 lần đầu tiên được thêm qua RHSA-2016. 1166 được phát hành như một phần của Red Hat Software Collections 2. 2RHSA-2016. Bản cập nhật 1166 bổ sung hỗ trợ cho PEP 476, tuy nhiên vì lý do tương thích ngược, nó tắt xác minh chứng chỉ theo mặc định. Nó cũng thực hiện hỗ trợ cho tệp cấu hình 1 được mô tả trong phần "" của PEP 493. Bộ sưu tập 0 lưu trữ tệp cấu hình 1 trong thư mục 4 thay vì thư mục 5. Với sự hỗ trợ này, xác minh chứng chỉ có thể được bật theo mặc địnhHỗ trợ cho PEP 493 trong bộ sưu tập 0 đã được mở rộng thêm thông qua RHSA-2017. 1162 được phát hành như một phần của Red Hat Software Collections 2. 4. Lỗi đó cập nhật Python lên phiên bản 2. 7. 13 và do đó bật xác minh chứng chỉ theo mặc định. Nó cũng thêm hỗ trợ cho các tính năng bổ sung được xác định trong PEP 493. "" và "". Tham khảo phần "Độ phân giải Red Hat Enterprise Linux 7" ở trên để biết thêm chi tiết về các tính năng nàyPhiên bản Python được sử dụng trong bộ sưu tập 7 không triển khai PEP 476 hoặc PEP 493 và hỗ trợ của chúng dự kiến sẽ không được bổ sung trong các bản cập nhật trong tương laiKiểm soát và khắc phục sự cố xác minh chứng chỉKiểm soát xác minh chứng chỉCác gói Python có hỗ trợ PEP 476 và PEP 493 khi được vận chuyển cùng với các sản phẩm Red Hat cho phép quản trị viên hệ thống đặt bật hoặc tắt xác minh chứng nhận theo mặc định thông qua tệp cấu hình kiểu INI. 8. Trong tệp cấu hình này, mặc định cho các máy khách HTTP trong thư viện chuẩn Python được đặt bằng cách sử dụng tùy chọn 9 trong phần 0. Phần này có thể trông như thế này
Các giá trị hợp lệ là 1 (xác minh được bật theo mặc định), 2 (xác minh bị tắt theo mặc định) và 3 (sử dụng mã hóa cứng mặc định cụ thể của nền tảng trong mô-đun 2). Người dùng được khuyến khích thử nghiệm các ứng dụng của họ với 1 và chỉ sử dụng 2 nếu việc xác minh gây ra sự cố trong môi trường của họ và chỉ cho đến khi những vấn đề đó có thể được giải quyết (e. g. bằng cách đảm bảo rằng tổ chức phát hành chứng chỉ (CA) được sử dụng bởi hệ thống của họ được định cấu hình là đáng tin cậy hoặc bằng cách sửa đổi các ứng dụng sẽ tiếp tục chạy khi xác minh bị vô hiệu hóa). Khi giá trị 3 được sử dụng, mặc định thực tế có thể thay đổi khi các gói Python bổ sung cập nhật với mặc định mã hóa cứng khác được phát hành trong tương laiKhi sử dụng các phiên bản Python hỗ trợ biến môi trường 3, biến đó có thể được sử dụng để đặt mặc định xác minh cho các lệnh gọi chương trình cụ thể. Các trường hợp sử dụng điển hình bao gồm
Khắc phục sự cố xác minh chứng chỉKhi Python được định cấu hình để thực hiện xác minh chứng chỉ cho các kết nối máy khách HTTPS, một số kết nối có thể không thành công do xác minh không thành công. Chương trình ngắn sau đây có thể được sử dụng để minh họa các lỗi phổ biến nhất có thể gặp phải
Lỗi phổ biến nhất xảy ra khi kết nối với máy chủ HTTPS xuất trình chứng chỉ do CA không xác định cấp
Theo mặc định, mô-đun Python 2 sử dụng gói chứng chỉ CA hệ thống - 3 - được vận chuyển như một phần của gói 4. Bên trong mạng nội bộ của công ty, các máy chủ thường sử dụng chứng chỉ do CA công ty nội bộ cấp thay vì CA Internet công cộng. Mọi chương trình bị ảnh hưởng phải được định cấu hình để sử dụng chứng chỉ CA nội bộ để có thể xác minh thành công chứng chỉ của các máy chủ đó. Có thể sử dụng các phương pháp không yêu cầu bất kỳ sửa đổi chương trình nào sau đây để làm cho chúng tin cậy các chứng chỉ từ CA công ty
Một vấn đề khác có thể gặp phải là khi máy chủ HTTPS mục tiêu có chứng chỉ do một trong các CA đáng tin cậy cấp, nhưng nó lại được cấp cho một tên máy chủ khác. Một lỗi như lỗi này được báo cáo trong trường hợp như vậy
Một trong những tên máy chủ được ghi trong chứng chỉ máy chủ nên được sử dụng khi kết nối với máy chủ đó. Nếu cả hai tên được liệt kê đều không thể sử dụng được, thì máy chủ phải được tạo chứng chỉ thích hợp hoặc cần tắt xác minh chứng chỉ trong các máy khách kết nối với nó Sửa đổi chương trình Python để kiểm soát xác minh chứng chỉVăn bản trên mô tả các phương pháp kiểm soát xác minh chứng chỉ mà không sửa đổi chương trình Python - sử dụng tệp cấu hình 1 và các biến môi trường. Các chương trình Python cũng có thể được sửa đổi để áp dụng cài đặt riêng của chúng để xác minh chứng chỉ bất kể mặc định của hệ thống
|