Tôi đang cố sử dụng HTTPSConnection của httplib để xác thực ứng dụng khách, bằng chứng chỉ PKCS # 12. Tôi biết giấy chứng nhận là tốt, vì tôi có thể kết nối với máy chủ bằng cách sử dụng nó trong MSIE và Firefox.Lỗi khi sử dụng HTTPSConnection của httlib với chứng chỉ PKCS # 12
Đây là chức năng kết nối của tôi (chứng chỉ bao gồm khóa riêng). Tôi đã pared nó xuống để chỉ những điều cơ bản:
def connect(self, cert_file, host, usrname, passwd):
self.cert_file = cert_file
self.host = host
self.conn = httplib.HTTPSConnection(host=self.host, port=self.port, key_file=cert_file, cert_file=cert_file)
self.conn.putrequest('GET', 'pathnet/,DanaInfo=200.222.1.1+')
self.conn.endheaders()
retCreateCon = self.conn.getresponse()
if is_verbose:
print "Create HTTPS connection, " + retCreateCon.read()
(Lưu ý: Không có nhận xét trên con đường mã hóa cứng, xin vui lòng - Tôi đang cố gắng để có được điều này để làm việc đầu tiên, tôi sẽ làm cho nó khá sau Đường dẫn mã hoá cứng là chính xác, khi tôi kết nối với nó trong MSIE và Firefox. Tôi đã thay đổi địa chỉ IP cho bài đăng.)
Khi tôi cố gắng chạy bằng chứng chỉ PKCS # 12 (tệp .pfx), Tôi lấy lại những gì dường như là một lỗi openSSL. Dưới đây là lỗi toàn bộ traceback:
File "Usinghttplib_Test.py", line 175, in t.connect(cert_file=opts["-keys"], host=host_name, usrname=opts["-username"], passwd=opts["-password"]) File "Usinghttplib_Test.py", line 40, in connect self.conn.endheaders() File "c:\python26\lib\httplib.py", line 904, in endheaders self._send_output() File "c:\python26\lib\httplib.py", line 776, in _send_output self.send(msg) File "c:\python26\lib\httplib.py", line 735, in send self.connect() File "c:\python26\lib\httplib.py", line 1112, in connect self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file) File "c:\python26\lib\ssl.py", line 350, in wrap_socket suppress_ragged_eofs=suppress_ragged_eofs) File "c:\python26\lib\ssl.py", line 113, in __init__ cert_reqs, ssl_version, ca_certs) ssl.SSLError: [Errno 336265225] _ssl.c:337: error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib
Thông báo, lỗi OpenSSL (mục cuối cùng trong danh sách) lưu ý "PEM lib", mà tôi tìm thấy lẻ, vì tôi không cố gắng sử dụng một giấy chứng nhận PEM.
Đối với các cú đá, tôi đã chuyển đổi chứng chỉ PKCS # 12 thành chứng chỉ PEM và chạy cùng mã sử dụng rằng. Trong trường hợp đó, tôi đã không nhận được lỗi, tôi đã được nhắc nhập cụm từ mật khẩu PEM và mã đã cố gắng truy cập vào máy chủ. (Tôi đã nhận được phản hồi "Dịch vụ không phải là khả dụng. Vui lòng thử lại sau.", Nhưng tôi tin rằng đó là vì máy chủ không chấp nhận chứng chỉ PEM. Tôi không thể kết nối trong Firefox với máy chủ bằng chứng chỉ PEM hoặc.)
HTTPSConnection của httplib có nghĩa vụ hỗ trợ chứng chỉ PCKS # 12 không? (Tức là, các tệp pfx.) Nếu vậy, tại sao nó trông giống như openSSL đang cố tải nó bên trong lib PEM? Tôi có làm điều này sai không?
Mọi lời khuyên đều được chào đón.
EDIT: Tệp chứng chỉ chứa cả chứng chỉ và khóa cá nhân, đó là lý do tại sao tôi cung cấp cùng tên tệp cho cả thông số key_file và cert_file của HTTPSConnection.
+1 cho RTFM. Bạn đã ở đâu năm ngoái khi tôi đang làm việc này? :) –
Xin chào Remi, tôi đã hơi chậm đánh dấu ;-) - Tôi khá mới đối với SO. Chỉ cần đi qua bài viết của bạn tìm kiếm trên một chuỗi lỗi tương tự. Hóa ra tôi đã chỉ xáo trộn trật tự đối số ở đâu đó dọc theo chuỗi cuộc gọi và không bao giờ thông qua con đường chính vào httplib. – Blairo