2

PythonでCSRを生成するスクリプトを書いています。スクリプトは非常に単純です。以下を使用してRSA秘密鍵を生成します。

keycmd = "openssl genrsa -out mykey.pem 2048"
keyprocess = Popen(keycmd, shell=True, stdout=PIPE)

csrcmd = "openssl req -new -key mykey.pem -subj "+ subj + " -out mycsr.csr"
reqprocess = Popen(csrcmd, shell=True, stdout=PIPE)

ただし、ユーザーが希望するパスワードで秘密鍵を暗号化する機能を追加したいと思います。これは通常、genrsaコマンドにオプション「-des3」を含めることで実行されますが、Python標準入力からOpenSSLプロセスに文字列をパイプする方法がわかりません。どんな助けでもいただければ幸いです。

私がやりたいことは:

keycmd = "openssl genrsa -des3 -out mykey.pem 2048"
keyprocess = Popen(keycmd, shell=True, stdin=PIPE, stdout=PIPE)
keyprocess.communicate("password")
keyprocess.communicate("password")

ただし、スクリプトはフリーズするだけで、最初の通信ステートメントを通過することはありません。

4

2 に答える 2

3

-passout stdinコマンドにオプションを追加するopenssl genrsaと、標準入力からパスフレーズが読み取られます。これにより、を介して送信できるようになりますcommunicate

-passout別のソースからパスフレーズを取得するオプションに提供できる値は他にもいくつかあります。詳細については、OpenSSLのマニュアルページを参照してください。

于 2010-08-11T19:59:57.420 に答える
2

Pexpectモジュールを試しましたか?

import pexpect

child = pexpect.spawn(keycmd)
child.expect("Enter pass phrase")
child.sendline("password")

child.expect("Verifying - Enter pass phrase")
child.sendline("password")
于 2010-08-11T19:48:56.337 に答える