2017-04-18 27 views
1

我被一個問題困住了一段時間,無法爲它找到正確的解決方案。(Python)將證書添加到瓶服務器

我有一個基於Bottle(Python 3)與PyCharm編寫的python服務器。我正在使用「pyinstaller」將我的文件轉換爲一個「exe」以在固定PC(win7)上啓動服務器。服務器可以正常工作,但現在我想爲它增加更多的安全性。

我有一個簽名證書(不是自簽名)和一個我想要添加的密鑰。我試圖與他們一起啓動服務器,但我不確定,如果我必須對他們做其他事情,因爲證書沒有顯示在信息的主頁上,並且網站仍顯示爲不保存。

我正常的服務器與運行:

from bottle import run, ... 
... 
if __name__ == "__main__": 
    ... 
    run(host=IP, port=PORT) 

我已經嘗試了一些瓶子框架和我結束了CherryPy的對視了一眼,啓動我的服務器以適當的方式。 服務器與運行:

run(host=IP, port=PORT, server='cherrypy', certfile='./static/MyCert.pem', keyfile='./static/key.pem') 

它不與CherryPy的當前版本的工作,所以我降級它(一些搜索之後)「> = 3.0.8,9.0.0 <」。 服務器正在運行,但該網站仍未保存。我不知道它是否沒有加載證書,或者我錯過了其他的東西。我嘗試了在代碼中保留「密鑰文件」或者將密鑰添加到我的證書中,但它不會改變任何內容。

我嘗試另一個框架是GEVENT:

from gevent import monkey; monkey.patch_all() 
... 
if __name__ == "__main__": 
    run(host=IP, port=PORT, reloader=False, server='gevent', certfile='./static/MyCert.pem', keyfile='./static/key.pem') 

但在這裏我不能去的網站。當我嘗試時,終端要求我提供PEM短語,但我不能添加它(或者只是不知道如何),並得到一個我從未見過的錯誤: terminal_error

Like in my cherrypy-例如,我嘗試使用某些代碼的部分組合或更改證書,但總是在此處結束。

這將是很好,如果有人有我的問題的解決方案或可以給我一個什麼我失蹤或只是還沒有想過的暗示。我希望繼續使用cherrypy或Bottle的其他框架,所以我不必更改當前的大部分代碼。

感謝

P.

回答

1

這聽起來像你對我添加一個密碼到您的證書。重新生成沒有密碼的證書,然後重試。

此外,一個建議的話。我強烈建議在逆向代理模式下運行你的瓶子/ cherrypy服務器。這通過讓nginx處理SSL會話的終止來簡化你的配置,然後你的python web服務器永遠不需要知道關於證書的任何信息。

下面是我們使用終止我們的(自簽名)SSL證書和反向代理我們的CherryPy的網站在端口9000上本地主機上運行Nginx的配置的絕密副本:

server { 
    listen example.com:80; 
    server_name test.example.com; 
    access_log /var/log/nginx/test.example.com.access.log main; 
    return 301 https://test.example.com$request_uri; 
} 

server { 
    listen example.com:443; 
    access_log /var/log/nginx/test.example.com.access.log main; 
    server_name test.example.com; 
    root /usr/local/www/test.example.com/html; 
    ssl     on; 
    ssl_certificate  /etc/ssl/test.example.com.crt; 
    ssl_certificate_key /etc/ssl/test.example.com.key; 
    ssl_session_timeout 5m; 
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # don't use SSLv3 ref: POODLE 
    ssl_ciphers HIGH:!aNULL:!MD5; 
    ssl_prefer_server_ciphers on; 

    client_max_body_size 16M; 

    # Block access to "hidden" files and directories whose names begin with a 
    # period. This includes directories used by version control systems such 
    # as Subversion or Git to store control files. 
    location ~ (^|/)\. { 
    return 403; 
    } 

    location/{ 
    proxy_pass http://127.0.0.1:9000; 
    proxy_set_header X-REAL-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 
}