1

私はこれに数日間立ち往生しており、まだ理解できませんでした。Python で単純な TLS c/s 通信を構築したいだけです。サーバーには EC2 を使用し、クライアントには自分のラップトップを使用します。通常のソケット通信をセットアップしてテストすると、すべて正常に動作します。

公式ドキュメントからこのチュートリアルを試すと、問題が発生します。次のクライアント コードの場合:

# require a certificate from the server
ssl_sock = ssl.wrap_socket(s,
                           ca_certs="/etc/ca_certs_file",
                           cert_reqs=ssl.CERT_REQUIRED)

私の知る限り、その部分/etc/ca_certs_fileは CA からの証明書である必要があります。どこで探せばいいのか困っています。私は実際にEC2サーバーでいくつかの.pemファイルを見つけ/etc/ssl/certsましたが、クライアントである私のラップトップでは何も見つけませんでした。

また、openssl のこのチュートリアルに従ってユーザー証明書を生成しようとしました。手順に従い、cakey.pemサーバーcacert.pemuserkey.pemusercert-req.pemクライアント用、すべて EC2 サーバーの同じディレクトリに生成しました。を実行するopenssl ca -in usercert-req.pem -out usercert.pemと、エラーが出力されます。

Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
unable to load certificate
140420412405408:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: TRUSTED CERTIFICATE

では、実際にこの証明書ファイルをどのように生成すればよいのでしょうか? サーバー側で生成し、クライアントが無線で要求するのを待つか、クライアント側で生成するか、サードパーティから取得してクライアント側で直接使用しますか?

誰でもガイダンスを提供できますか?どんな助けでも大歓迎です。

4

1 に答える 1

2

これにより、自己署名証明書のペアが作成され、秘密鍵は同じファイルに含まれます。

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

そして、サーバー側のpythonから:

new_client_socket, address = server_socket.accept()
secured_client_socket = ssl.wrap_socket(new_client_socket,
                                        server_side=True,
                                        certfile='cert.pem',
                                        keyfile='cert.pem',
                                        ssl_version=ssl.PROTOCOL_TLSv1)

そしてクライアントアプリケーション:

unsecured_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket = ssl.wrap_socket(unsecured_client_socket,
                                ca_certs='cert.pem',
                                cert_reqs=ssl.CERT_REQUIRED,
                                ssl_version=ssl.PROTOCOL_TLSv1)
于 2012-09-07T06:39:22.047 に答える