Python子进程问题
我正在编写一个用Python生成CSR的脚本。剧本很简单。我使用以下方法生成RSA私钥:Python子进程问题,python,openssl,pipe,csr,Python,Openssl,Pipe,Csr,我正在编写一个用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, she
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")
但是,它不起作用,脚本只是冻结,永远无法通过第一个communicate语句。您尝试过该模块吗
将选项
-passout stdin
添加到openssl genrsa
命令中,它将从标准输入读取密码短语。这应该允许您通过通信发送
您可以向-passout
选项提供几个其他值,以从其他来源获取密码短语。有关详细信息,请参阅。您是否尝试了我在前面类似问题中建议的解决方案?(m2crypto或python nss)。我宁愿不必下载外部库。我写的代码是为了便于移植,我不希望人们下载除了OpenSSL以外的任何东西。谢谢,尽管我在shell中输入了以下内容:openssl genrsa-out mykey.pem-passout stdin 1024它等待来自stdin的输入。我输入一个单词,然后按Enter键。但是,生成的私钥未加密。你知道为什么吗?我猜是因为你没有提供-des3
选项-passout
只告诉OpenSSL从给定源读取密码,而不告诉它使用密码做任何事情。
import pexpect
child = pexpect.spawn(keycmd)
child.expect("Enter pass phrase")
child.sendline("password")
child.expect("Verifying - Enter pass phrase")
child.sendline("password")