Python子进程问题

标签 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, 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")

但是它不起作用,脚本只是卡住并且永远不会通过第一个通信语句。

最佳答案

将选项-passout stdin添加到openssl genrsa命令中,它将从标准输入读取密码。这应该允许您通过communicate发送它。

您可以向 -passout 选项提供其他几个值,以从其他来源获取密码。请参阅OpenSSL man page了解详情。

关于Python子进程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3460971/

相关文章:

c# - 如何从文件中加载 c# 中的 .pem 证书?

c# - 在c#中使用公钥加密数据,在php中使用私钥解密数据

mysql - 使用 openSSL 构建 MySQL 5.6.34

c - 如何检测 popen 中的失败命令?

读取管道后 bash 返回代码

Python 变量和 subprocess.call

python - pyopenCL,openCL,无法在GPU上构建程序

C跨平台捕获管道子进程

python - DjangoModelPermissions 和 DjangoObjectPermissions 之间有什么区别

python - django 检查上传的文件是否为 zip 文件