2017-04-18 77 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; 
    } 
}