Tôi đang viết một ứng dụng yêu cầu phải cài đặt chứng chỉ trong trình duyệt của khách hàng. Tôi đã tìm thấy điều này trong các tài liệu PyOpenSSL cho đối tượng "Context" nhưng tôi không thể thấy bất cứ điều gì về cách gọi lại là nghĩa vụ phải xác nhận cert, chỉ có nó nên, bằng cách nào đó.Xác thực chứng chỉ ứng dụng khách trong PyOpenSSL
set_verify(mode, callback) Set the verification flags for this Context object to mode and specify that callback should be used for verification callbacks. mode should be one of VERIFY_NONE and VERIFY_PEER. If VERIFY_PEER is used, mode can be OR:ed with VERIFY_FAIL_IF_NO_PEER_CERT and VERIFY_CLIENT_ONCE to further control the behaviour. callback should take five arguments: A Connection object, an X509 object, and three integer variables, which are in turn potential error number, error depth and return code. callback should return true if verification passes and false otherwise.
Tôi đang nói với đối tượng Ngữ cảnh nơi các phím (tự ký) của tôi là (xem bên dưới) vì vậy tôi đoán tôi không hiểu tại sao điều đó không đủ để thư viện kiểm tra xem chứng nhận của khách hàng là một giá trị hợp lệ. Bạn nên làm gì trong chức năng gọi lại này?
class SecureAJAXServer(PlainAJAXServer):
def __init__(self, server_address, HandlerClass):
BaseServer.__init__(self, server_address, HandlerClass)
ctx = SSL.Context(SSL.SSLv23_METHOD)
ctx.use_privatekey_file ('keys/server.key')
ctx.use_certificate_file('keys/server.crt')
ctx.set_session_id("My_experimental_AJAX_Server")
ctx.set_verify(SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT | SSL.VERIFY_CLIENT_ONCE, callback_func)
self.socket = SSL.Connection(ctx, socket.socket(self.address_family, self.socket_type))
self.server_bind()
self.server_activate()
Lưu ý: Mã hóa để giải trí ở đây, không phải là chuyên gia vì vậy nếu Q của tôi cho thấy sự thiếu hiểu biết, thiếu hiểu biết và cơ bản của tôi khi nói đến SSL, đừng quá thô lỗ!
Cảm ơn :)
Roger