【问题标题】:Pass in a password into OpenSSL using Python使用 Python 将密码传入 OpenSSL
【发布时间】:2014-06-19 23:42:43
【问题描述】:

我正在用 Python 编写一个脚本来自动创建证书。我可以成功地使用 subprocess.Popen 将输入参数传递给 keytool,但我无法弄清楚如何使用 OpenSSL 来做到这一点。我做了很多研究,并尝试在几乎所有排列中使用“-passout”、“-passin”、“passwd”,但我总是得到一个无效的参数。我正在尝试使用“openssl ca”和“openssl req”来做到这一点。

p = subprocess.Popen(['openssl', 'req', '-new', '-x509', '-extensions', 'v3_ca', '-keyout', 'c:\\cert\\sslcert\\private\\cakey.pem', '-out', 'c:\\cert\\sslcert\\cacert.pem', '-days', '3653', '-config', 'c:\\cert\\sslcert\\openssl.cnf'],stdin=subprocess.PIPE,stdout=subprocess.PIPE)
stdout, stderr = p.communicate(input='\nXFY-' +date +'\n' +email +'\n' +'\n' +'\n' +'\n' +common_name +'\n')

我对密码开关所做的任何尝试都会导致“未知选项 -passout(-passin,passwd 等)”。我想要做的就是将之前使用“getpass”输入的密码自动输入到 openssl 命令中。

现在,当代码执行时,它会到达上述命令并显示“输入 PEM 密码:”。输入此内容后,我在communicate() 中的其余参数按预期执行......只是无法让它自动输入 PEM 密码短语。该站点上的其他一些类似提到使用“expect”或“pexpect”的问题,但这似乎过于复杂。这是唯一的方法吗?另外,pexpect 默认不附带 Python 2.7,因此您必须在安装 Python 后添加它,这是我需要在不同机器上经常做的事情。

编辑:看起来 pexpect 无论如何都适用于 UNIX 机器。我在 Windows 上执行此操作。

【问题讨论】:

  • 你能得到一个-passin arg 从命令行使用 OpenSSL 吗?
  • 我不能。我总是得到一个“未知选项”。我试着把它放在 openssl 之后,比如 openssl req -passin pass:password 以及最后和中间的某个地方,但它总是说 known option。
  • 实际上,我只是再次尝试以确保在最后抛出它时它没有说“未知选项”,但它仍然提示输入“输入 PEM 密码:”部分.
  • 啊,实际上,我认为您不需要-passin,因为您没有提供密钥。从命令行尝试-passout - 我认为这就是您被提示的内容。
  • 所以在命令 shell 中输入它(使用 -passout)是可行的,但使用 subprocess.Popen 的完全相同的语句却没有:p = subprocess.Popen(['openssl', 'req' , '-passout pass:mypassword','-new', '-x509', '-extensions', 'v3_ca', '-keyout', 'c:\\cert\\sslcert\\private\\cakey.pem ', '-out', 'c:\\cert\\sslcert\\cacert.pem', '-days', '3653', '-config', 'c:\\cert\\sslcert\\openssl. cnf'],stdin=subprocess.PIPE,stdout=subprocess.PIPE) stdout, stderr = p.communicate(input='\nXFAMILY-' +date +'\n' +email +'\n' +'\n' +'\n' +'\n' +common_name +'\n') 我得到一个“未知选项”。

标签: python openssl popen


【解决方案1】:

当您将参数传递给Popen() 时,您需要将选项和值分开。 -passout pass:mypassword 应该是两个参数,而不是一个。

【讨论】:

  • 谢谢,这就是问题所在!
猜你喜欢
  • 1970-01-01
  • 2011-09-13
  • 2018-03-16
  • 2021-01-20
  • 1970-01-01
  • 2022-10-12
  • 2020-12-06
  • 2021-05-03
  • 2021-09-07
相关资源
最近更新 更多