2012-06-29 12 views
5

単純なSSLサーバーを設定しようとしています。私は過去に私のために何もSSLの仕事をしたことはありません。私は、SSL証明書と署名の仕方をゆるやかに理解しています。それは作業イマイチです後Python Simple SSLソケットサーバー

コードが###秒として

import socket, ssl 

context = ssl.SSLContext(ssl.PROTOCOL_TLSv1) 
context.load_cert_chain(certfile="mycertfile") ############### 

bindsocket = socket.socket() 
bindsocket.bind(('', 2099)) 
bindsocket.listen(5) 

while True: 
    newsocket, fromaddr = bindsocket.accept() 
    sslsoc = context.wrap_socket(newsocket, server_side=True) 
    request = sslsoc.read() 
    print(request) 

ラインに簡単です。私はここで動作するPEMファイルを生成するためにopensslと何をしなければならないのか分かりません。

誰でもこの単純なソケット作業を行う方法について教えてもらえますか?

ところで、これはHTTPでは使用されません。

+0

もしツイストを使用するのが良ければ、OpenSSLを使用する良い例があります:http://twistedmatrix.com/documents/current/core/howto/ssl.html 証明書と公開鍵は、公開鍵のプライベートペアで証明書が署名されています。 – jozzas

+0

それはいいですし、それはもっと簡単に見えますが、私が必要とするのは、使用する正しいファイルを生成するコマンドです。私は少し前にそれを試しましたが、非常に奇妙なエラーがありました。明らかに私はそれを正しく署名しなかったし、正しいファイルを使用しなかった。 – Caprin

+0

これにはたくさんのチュートリアルがあるようですが、これを試してみましたか? http://devsec.org/info/ssl-cert.html – jozzas

答えて

8

あなたはopensslのフレームワークは、単に命令に従うなど、あなたの国、都市、などいくつかの情報を、入力するように要求されます

openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem 

自己署名証明書を生成するには、このコマンドを使用すると、あなたのことができますファイルはcert.pemになります。出力ファイルには、公開鍵を生成するためのRSA秘密鍵と証明書の両方が含まれます。

-----BEGIN RSA PRIVATE KEY----- 
# your private key 
-----END RSA PRIVATE KEY----- 
-----BEGIN CERTIFICATE----- 
# your certificate 
-----END CERTIFICATE----- 

ちょうどそれをロードし、SSLモジュールは、あなたのための残りを処理します: 出力ファイルは次のようになります

context.load_cert_chain(certfile="cert.pem", keyfile="cert.pem") 

ところで、 "のSSLContextは" python2ではありません。 python2を使用している男性のためのソケットを包むとき、ちょうどPEMファイルを割り当てる:

newsocket, fromaddr = bindsocket.accept() 
connstream = ssl.wrap_socket(newsocket, 
          server_side=True, 
          certfile="cert.pem", 
          keyfile="cert.pem", 
          ssl_version=YOUR CHOICE) 

利用できるSSLバージョン:ssl.PROTOCOL_TLSv1ssl.PROTOCOL_SSLv2ssl.PROTOCOL_SSLv3ssl.PROTOCOL_SSLv23。他のバージョンとの互換性を最大限に引き出すために、あなたが考えていない場合は、ssl.PROTOCOL_SSLv23をお選びください。

+1

'context'を作成するには、' ssl.create_default_context'関数を呼び出します(これは最近のPython 2でも有効です)。 – jfs

+0

私はこれが古い投稿だと知っていますが、POODLEの脆弱性のため、誰もTLSでSSLv3の使用を勧めるべきではありません。詳細はhttps://en.wikipedia.org/wiki/POODLEをご覧ください。 – fileinster

関連する問題