Hướng dẫn php tcp connect
CẬP NHẬT : có một cách tốt hơn để làm điều này, hãy xem các nhận xét. Bạn có thể chụp chứng chỉ và trò chuyện với máy chủ bằng cách sử dụng Đây là một triển khai chưa hoàn chỉnh (không có cuộc trò chuyện gửi thư thực tế) nên bạn sẽ bắt đầu:
Tất nhiên, bạn sẽ di chuyển phân tích và kiểm tra chứng chỉ trước khi bạn gửi bất kỳ thứ gì có ý nghĩa đến máy chủ. Trong
Để kiểm tra tính hợp lệ, ngoài việc kiểm tra ngày, v.v., SSL tự thực hiện, bạn phải xác minh rằng ĐỦ các điều kiện sau áp dụng:
Xác minh chứng chỉ bằng PHPTốt nhất là ý nghĩa của xác minh máy chủ trong các phần mềm khác nhau . Vì vậy, tôi quyết định tìm hiểu ở phần cuối của điều này, và tải xuống mã nguồn của OpenSSL (openssl-1.0.1c) và cố gắng tự mình kiểm tra. Tôi không tìm thấy tham chiếu nào đến mã mà tôi mong đợi, cụ thể là:
OpenSSL dường như đưa tất cả các chi tiết chứng chỉ vào một cấu trúc, chạy các bài kiểm tra rất cơ bản trên một số chúng, nhưng hầu hết các trường "con người có thể đọc được" đều bị bỏ lại. Nó có ý nghĩa: có thể lập luận rằng kiểm tra tên ở cấp độ cao hơn kiểm tra chữ ký chứng chỉ Sau đó, tôi cũng tải xuống cURL mới nhất và tarball PHP mới nhất. Trong mã nguồn PHP, tôi cũng không tìm thấy gì; rõ ràng bất kỳ tùy chọn nào chỉ được truyền xuống dòng và nếu không thì bị bỏ qua. Mã này chạy không có cảnh báo:
và
Điều này cũng có ý nghĩa: PHP không thể biết, trong ngữ cảnh "context-option-setting", những tùy chọn nào sẽ được sử dụng dưới dòng. Cũng như vậy, mã phân tích cú pháp chứng chỉ phân tích cú pháp chứng chỉ và trích xuất thông tin mà OpenSSL đặt ở đó, nhưng nó không xác thực thông tin tương tự. Vì vậy, tôi đã đào sâu hơn một chút và cuối cùng đã tìm thấy mã xác minh chứng chỉ trong cURL, tại đây:
nơi nó thực hiện những gì tôi mong đợi: nó tìm kiếm subjectAltNames, nó kiểm tra tất cả chúng xem có tỉnh táo không và chạy chúng qua Tóm lại, OpenSSL chạy một số kiểm tra đơn giản và giao phần còn lại cho người gọi. cURL, gọi OpenSSL, thực hiện nhiều kiểm tra hơn. PHP cũng chạy một số kiểm tra trên CN với Thiếu khả năng truy cập các chức năng của cURL, giải pháp thay thế tốt nhất là thực hiện lại các chức năng đó trong PHP. Ví dụ: đối sánh miền ký tự đại diện biến có thể được thực hiện bằng cách chấm nổ cả miền thực và miền chứng chỉ, đảo ngược hai mảng
và xác minh rằng các mục tương ứng là bằng nhau hoặc chứng chỉ một là *; nếu điều đó xảy ra, chúng tôi phải kiểm tra ít nhất hai thành phần, ở đây Tôi tin rằng giải pháp trên là một trong những giải pháp tốt nhất nếu bạn muốn kiểm tra tất cả các chứng chỉ trong một lần. Thậm chí tốt hơn là có thể mở luồng trực
tiếp mà không cần đến Kiểm traTôi có một chứng chỉ tốt, hợp lệ và hoàn toàn đáng tin cậy từ Thawte được cấp cho "mail.eve.com". Đoạn mã trên chạy trên Alice sau đó sẽ kết nối an toàn với Bây giờ tôi cài đặt cùng một chứng chỉ đó Tôi hy vọng các kết nối SSL để làm việc vẫn (giấy chứng nhận là hợp lệ và đáng tin cậy), nhưng chứng chỉ không được cấp cho Bob - nó cấp cho Eve. Vì vậy, ai đó phải kiểm tra lần cuối này và cảnh báo Alice rằng Bob thực sự đang bị Eve mạo danh (hoặc tương đương, Bob đang sử dụng chứng chỉ bị đánh cắp của Eve). Tôi đã sử dụng mã dưới đây:
và:
Tôi hiểu điều này có nghĩa là, trừ một số lỗi ngu ngốc từ phía tôi, PHP không tự kiểm tra các chứng chỉ so với tên . Sử dụng 8 hữu ích 5 bình luận chia sẻ |