2017-04-18 9 views
1

私はしばらくの間問題が残っており、適切な解決策を見つけることができません。(Python)ボトルサーバーに証明書を追加してください

私はPyCharmで書かれたBottle(Python 3)に基づいてPythonサーバーを持っています。私は固定されたPC(win7)でサーバを起動するために、 "pyinstaller"を使って自分のファイルを "exe"に変換しています。サーバーは必要なものに対してはうまく動作しますが、今はさらにセキュリティを強化したいと考えています。

私は署名した証明書(自己署名していない)と、追加したい鍵を持っています。私はそれらを使ってサーバーを起動しようとしましたが、証明書がホームページの情報に表示されず、Webサイトがまだ保存されていないため、他の何かをする必要がある場合はわかりません。私はボトルのためのいくつかのフレームワークを試してみました、私は適切な方法で自分のサーバーを起動する1、とCherryPyにで終わる

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

私の正常なサーバがで実行されています。 サーバがで実行されている:

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

に(いくつかの検索の後に)それはCherryPyに、現在のバージョンで動作していないので、私はそれを格下げ「> = 3.0.8、9.0.0 <」。 サーバーは稼働していますが、Webサイトはまだ保存されていません。証明書がロードされていないか、何かが紛失しているかどうかはわかりません。コードに "keyfile"を残したり、証明書にキーを追加するなどの作業を試みましたが、何も変更されません。

私が試したもう一つのフレームワークは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のフレーズを要求しますが、それを追加することはできません。例私は、コードの一部を残したり、証明書を変更したりするいくつかの組み合わせを使用しようとしましたが、常にここで終わります。

誰かが私の問題の解決策を持っているか、私が逃していることやまだ考えていないことのヒントを与えることができればいいと思います。私はcherrypyやBottleの別のフレームワークを使いたいので、現在のコードを変更する必要はありません。

おかげ

P.

答えて

1

あなたの証明書へのパスフレーズを追加したようにそれは私に聞こえます。パスフレーズなしで証明書を再生成して、もう一度試してください。

さらに、助言の言葉。私は非常にリバースプロキシモードでnginxの背後にあなたのボトル/ cherrypyサーバーを実行することをお勧めします。これにより、nginxにSSLセッションの終了を処理させることで設定が簡単になり、Python Webサーバーは証明書について何も知る必要がありません。

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; 
    } 
} 
:ここ

は、我々は(自己署名)のSSL証明書を終了し、ポート9000上でローカルホスト上で実行されているプロキシ当社CherryPyにサイトを反転させるために使用しているnginxの設定ファイルの編集済みコピーです
関連する問題