我遇到问题已经有一段时间了,无法找到合适的解决方案。
我有一个基于使用PyCharm编写的Bottle(Python 3)的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
就像在我的樱桃示例中一样,我尝试使用一些离开代码部分或更改证书的组合,但它总是在这里结束。
如果有人能解决我的问题,或者能给我一些我遗漏或者还没有想到的东西,那将会很好。我想继续使用cherrypy或其他框架,所以我不需要更改我当前的代码。
由于
P上。
答案 0 :(得分:1)
听起来像你在证书中添加了一个密码。在没有密码短语的情况下重新生成您的证书,然后重试。
另外,提出建议。我强烈建议在反向代理模式下运行nginx后面的瓶子/ cherrypy服务器。这通过让nginx处理SSL会话的终止来简化您的配置,然后您的python Web服务器永远不需要了解有关证书的任何信息。
这是我们用于终止我们的(自签名)SSL证书的nginx配置的编辑副本,并反向代理我们在端口9000上的localhost上运行的cherrypy站点:
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;
}
}