Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python web.py上的SSL证书链不完整_Python_Ssl_Ssl Certificate_Web.py - Fatal编程技术网

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

Python web.py上的SSL证书链不完整,python,ssl,ssl-certificate,web.py,Python,Ssl,Ssl Certificate,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的域名时,它说它是安全的

我无法确定如何在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的域名时,它说它是安全的


但是,

  • 当我尝试从Rails应用程序发送Webhook时,它会响应:

    SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
    
  • 如果我尝试在命令提示符下使用openssl进行连接,如下所示:

    openssl s_client -showcerts -connect mydomain.com:443
    
    ..它只显示域的证书,而不显示链的其余部分,并且输出包含错误消息:

    verify error:num=20:unable to get local issuer certificate
    verify error:num=21:unable to verify the first certificate
    
  • 如果我运行该域,尽管它通过了B级,但在证书下会显示:

    Chain issues    Incomplete
    
    …在认证路径下,中间产品标记为“额外下载”,而不是“由服务器发送”


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

例如,我试着把:

  • 只有中级证书
  • 中间人和根证书
  • 域、中间产物和根
…导入证书链文件。我还尝试将整个链包含在证书文件中。我尝试了扩展.crt、.pem、.perm、.ca包

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


另一方面,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\u certificate\u链
edit,因为它不会被传递

幸运的是,有一个简单的补丁,每个

编辑
web/httpserver.py
,以通过
ssl\u证书链
(如果已定义)。那么你的代码就可以工作了

== 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))

web.py
v0.38不使用现成的证书链。这意味着它会忽略您的
CherryPyWSGIServer.ssl\u certificate\u链
edit,因为它不会被传递

幸运的是,有一个简单的补丁,每个

编辑
web/httpserver.py
,以通过
ssl\u证书链
(如果已定义)。那么你的代码就可以工作了

== 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))