我正在编写一个用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")
然而,它不起作用,脚本只是冻结并且永远不会超过第一个通信声明。
答案 0 :(得分:3)
将选项-passout stdin
添加到openssl genrsa
命令,它将从标准输入中读取密码。这应该允许您通过communicate
发送。
您可以为-passout
选项提供其他几个值,以便从其他来源获取密码。有关详细信息,请参阅OpenSSL man page。
答案 1 :(得分: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")