Làm cách nào để có được LWP để xác minh rằng chứng chỉ của máy chủ mà tôi đang kết nối được ký bởi cơ quan đáng tin cậy và được cấp cho đúng máy chủ lưu trữ? Theo như tôi có thể nói, nó thậm chí không kiểm tra xem chứng chỉ yêu cầu là tên máy chủ mà tôi đang kết nối đến. Điều đó có vẻ giống như một lỗ hổng bảo mật lớn (đặc biệt là với các lỗ hổng DNS gần đây).Tôi làm cách nào để LWP xác thực chứng chỉ máy chủ SSL?
Cập nhật: Nó chỉ ra những gì tôi thực sự muốn là HTTPS_CA_DIR
, bởi vì tôi không có ca-bundle.crt. Nhưng HTTPS_CA_DIR=/usr/share/ca-certificates/
đã làm các trick. Tôi đánh dấu câu trả lời là chấp nhận, bởi vì nó đã đủ gần.
Cập nhật 2: Nó chỉ ra rằng HTTPS_CA_DIR
và HTTPS_CA_FILE
chỉ áp dụng nếu bạn đang sử dụng Net :: SSL làm thư viện SSL cơ bản. Nhưng LWP cũng làm việc với IO :: Socket :: SSL, nó sẽ bỏ qua các biến môi trường đó và vui vẻ nói chuyện với bất kỳ máy chủ nào, bất kể chứng chỉ nào trình bày. Có giải pháp tổng quát hơn không?
Cập nhật 3: Thật không may, giải pháp vẫn chưa hoàn tất. Cả Net :: SSL và IO :: Socket :: SSL đều không kiểm tra tên máy chủ đối với chứng chỉ. Điều này có nghĩa là ai đó có thể nhận được chứng chỉ hợp pháp cho một số miền và sau đó mạo danh bất kỳ miền nào khác mà không có LWP phàn nàn.
Cập nhật 4:LWP 6.00 cuối cùng cũng giải quyết được sự cố. Xem my answer để biết chi tiết.
Không, giải pháp được chấp nhận không gặp phải vấn đề này. (Ok, tôi đã tự viết nó.) LWP 6 không so sánh Common Name với tên máy chủ theo mặc định và hủy bỏ nếu chúng không khớp. (Bạn đúng rằng các phiên bản trước của LWP không.) – cjm
Điều đó không đúng, tôi đang sử dụng phiên bản LWP :: UserAgent (phiên bản 6.04) mới nhất làm phụ trợ cho SOAP :: Lite (phiên bản 0.714). Phần phụ trợ của LWP :: UserAgent là IO :: Socket :: SSL trên máy này. Tôi đã tìm thấy rằng không có mã được bao gồm ở trên, không phải CN được kiểm tra cũng như chuỗi chứng chỉ đã được xác minh. Sử dụng ssl_opts() để đặt "verify_hostname" và "SSL_ca_path" không có hiệu lực. – blumentopf
Tôi sẽ đặt cược bạn có tập hợp '$ ENV {PERL_LWP_SSL_VERIFY_HOSTNAME}', '$ ENV {HTTPS_CA_FILE}' hoặc '$ ENV {HTTPS_CA_DIR} ', bất kỳ cài đặt nào trong số đó đều có thể vô hiệu hóa kiểm tra tên máy chủ. – cjm