2017-05-04 94 views
0

不完整的,我不能工作,如何正確地安裝在web.py應用的SSL證書鏈...SSL證書鏈上web.py

在Python代碼,我有:

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

當我在Chrome中訪問該域時,它說它是安全的。


然而,

  • 當我嘗試從一個Rails應用程序它響應發送網絡掛接:

    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 
    
  • 如果我運行通過Qualys SSL Server Test域,雖然它用B等級通過,下證書它說:

    Chain issues Incomplete 
    

    ...並在認證途徑中間體被標記爲「額外下載」,而不是「通過服務器發送」


我試過一些不同的文件內容和文件擴展名組合。

E.g.我試過了:

  • 只有中間證書;
  • 中間體和根證書;
  • 域,中間體和根

...到certificate_chain文件。我也嘗試在證書文件中包含整個鏈。我試過擴展名.crt,.pem,.perm,.ca-bundle

有沒有人有任何建議適當的文件格式,包含方法,文件擴展名或任何其他配置選項,我可能需要?謝謝!


P.S. Python版本是2.7.12 和PIP凍結顯示安裝以下軟件包:

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 

回答

1

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