web.py 上的 SSL 证书链不完整

SSL certificate chain incomplete on web.py

我不知道如何在 web.py 应用程序上正确设置 SSL 证书链...

在 python 代码中我有:

CherryPyWSGIServer.ssl_certificate = "/path/mycert.pem"
CherryPyWSGIServer.ssl_certificate_chain = "/path/mychain.ca-bundle"
CherryPyWSGIServer.ssl_private_key = "/path/mykey.key"

当我访问 Chrome 中的域时,它说它是安全的。


然而,


我尝试了一些不同的文件内容和文件扩展名组合。

例如我试过输入:

...进入 certificate_chain 文件。我也试过在证书文件中包含整个链。我试过扩展名 .crt、.pem、.perm、.ca-bundle

有人对正确的文件格式、包含方法、文件扩展名或我可能需要的任何其他配置选项有任何建议吗?谢谢!


P.S。 Python 版本为 2.7.12 pip freeze 显示安装了以下软件包:

cffi==1.8.3
cryptography==1.5.2
enum34==1.1.6
idna==2.1
ipaddress==1.0.17
pyasn1==0.1.9
pycparser==2.16
pyOpenSSL==16.2.0
requests==2.11.1
six==1.10.0
web.py==0.38

web.py v0.38 不使用开箱即用的证书链。这意味着它会忽略您的 CherryPyWSGIServer.ssl_certificate_chain 编辑,因为它没有通过。

幸运的是,根据 https://github.com/movb/webpy/commit/9f9f6838e49f17cf395282392c3fc2762a97460b

,有一个简单的补丁

编辑 web/httpserver.py,以通过 ssl_certificate_chain(如果已定义)。然后你的代码就可以工作了。

== web/httpserver.py ==
- def create_ssl_adapter(cert, key):
+ def create_ssl_adapter(cert, key, chain=None):

- adapter = pyOpenSSLAdapter(cert, key)
+ adapter = pyOpenSSLAdapter(cert, key, chain)

- server.ssl_adapter = crate_ssl_adapter(server.ssl_certificate, server.ssl_private_key)
+ server.ssl_adapter = create_ssl_adapter(server.ssl_certificate, server.ssl_private_key,
+                                         getattr(server, 'ssl_certificate_chain', None))