14

シンプルなSSLサーバーをセットアップしようとしています。過去に SSL が機能したことはありません。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 には使用されません。

4

2 に答える 2

24

このコマンドを使用して、自己署名証明書を生成できます

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

openssl フレームワークは、国、都市などの情報を入力するように求めます。指示に従うだけで、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")

ところで、python2には「SSLContext」はありません。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_TLSv1、、、。よくわからない場合は、他のバージョンとの互換性が最も高いため、これを選択することをお勧めします。ssl.PROTOCOL_SSLv2ssl.PROTOCOL_SSLv3ssl.PROTOCOL_SSLv23ssl.PROTOCOL_SSLv23

于 2012-12-09T06:20:57.870 に答える