python webserver https证书

时间:2019-07-09 18:16:26

标签: python webserver

我想使用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)

我做错了什么?

2 个答案:

答案 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