Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python子进程问题_Python_Openssl_Pipe_Csr - Fatal编程技术网

Python子进程问题

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

我正在编写一个用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")
但是,它不起作用,脚本只是冻结,永远无法通过第一个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")