[英]How to capture the output of openssl in python
我正在尝试在python中运行以下openssl命令:
cmd = "openssl x509 -sha1 -in esx.crt -noout -fingerprint"
tmp = os.popen(cmd)
tmp_sha1 = tmp.readline()
该命令应该生成证书的指纹。 我正在尝试通过文件对象捕获输出。 但是,当我读取此文件对象时,其中没有任何内容。 我在命令行上执行了此命令,它运行正常,生成指纹。 你能告诉我如何获得指纹吗?
您可以使用两个模块来建立所需的subprocess
和os
。
使用subprocess
您可以使用communicate()
检查该过程的输出,该过程从stdout和stderr读取数据,直到EOF为止 。
>>> import subprocess
>>> p = subprocess.Popen("openssl x509 -sha1 -in 17.cert -noout -fingerprint", stdout=subprocess.PIPE)
>>> out, _ = p.communicate() #return a tuple (stdout, stderr)
>>> out
b'SHA1 Fingerprint=87:68:8B:B0:6A:E2:DF:A3:E2:63:76:97:A9:2B:B4:F4:82:4E:0B:D1\n'
使用os
模块也可以很好地使用read()
和readline()
方法:(请注意os.popen()已弃用 )
>>> import os
>>> p = os.popen("openssl x509 -sha1 -in 17.cert -noout -fingerprint")
>>> p.read()
'SHA1 Fingerprint=87:68:8B:B0:6A:E2:DF:A3:E2:63:76:97:A9:2B:B4:F4:82:4E:0B:D1\n'
>>> p = os.popen("openssl x509 -sha1 -in 17.cert -noout -fingerprint")
>>> out = p.readline()
'SHA1 Fingerprint=87:68:8B:B0:6A:E2:DF:A3:E2:63:76:97:A9:2B:B4:F4:82:4E:0B:D1\n'
如果要将值写入文件,那么也可以正常工作,可以通过在当前工作目录中打开文件output.txt
进行验证:
>>> with open('./output.txt', 'w') as f:
... f.write(out)
...
77
77
通知我们该文件已写入77个字节,您可以通过在喜欢的文本编辑器中将其打开来进行验证。
您可以使用OpenSSL
模块在Python中本地实现此目的。
from OpenSSL.crypto import load_certificate, FILETYPE_PEM
cert_file_string = open("esx.crt", "rb").read()
cert = load_certificate(FILETYPE_PEM, cert_file_string)
sha1_fingerprint = cert.digest("sha1")
print sha1_fingerprint
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.