我想使用https在Linux(RedHat或CentOS)上运行Python网络服务器。我获得了(内部)证书,并获得了必需的中间和根证书。我将它们全部整理到一个文件server.pem中。
这是我的代码:
httpd = BaseHTTPServer.HTTPServer(('localhost', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)
cf = '/home/degenaro/workspace/certs/server.pem'
httpd.socket = ssl.wrap_socket (httpd.socket, certfile=cf, server_side=True)
httpd.serve_forever()
结果如下:
回溯(最近通话最近一次):
File "/home/degenaro/workspace/web.py", line 66, in <module> main() File "/home/degenaro/workspace/web.py", line 56, in main httpd.socket = ssl.wrap_socket (httpd.socket, certfile=cf, server_side=True) File "/usr/lib64/python2.7/ssl.py", line 934, in wrap_socket ciphers=ciphers) File "/usr/lib64/python2.7/ssl.py", line 547, in __init__ self._context.load_cert_chain(certfile, keyfile) ssl.SSLError: [PEM] ASN1 lib (_ssl.c:2574)
我做错了什么?
答案 0 :(得分:0)
此错误是因为SSL_CTX_check_private_key
失败;因此,私钥不正确。
请确保:
600
; 答案 1 :(得分:0)
首先,如果您可以提供正在使用的python的发行版本以及它使用的OpenSSL库,这将有所帮助。
似乎错误是.pem文件的格式。它具有以下结构吗? (as described here)
-----BEGIN CERTIFICATE----- ... (certificate for your server)... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... (the certificate for the CA)... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... (the root certificate for the CA's issuer)... -----END CERTIFICATE-----
我还从评论中收集到,服务器证书无效,可能是由于编码错误所致。请尝试:
openssl x509-通知DER-输入[current_server_cert.pem]-输出[new_server_cert.pem] [如此处所示] 2