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 stdinopenssl 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 回答