我在嘗試驗證帶有CA包文件的證書。最初的Bash命令需要兩個像這樣的文件參數;運行帶有兩個字符串輸入的子進程命令
openssl verify -CAfile ca-ssl.ca cert-ssl.crt
我試圖找出如何運行蟒子上面的命令,同時具有ca-ssl.ca和CERT-ssl.crt可變字符串(而不是文件)。
如果我在bash中用變量(而不是文件)運行命令,那麼這將工作;
ca_value=$(<ca-ssl.ca)
cert_value=$(<cert-ssl.crt)
openssl verify -CAfile <(echo "$ca_value") <(echo "$cert_value")
不過,我掙扎弄清楚如何做上述與Python,最好是不需要使用shell=True
。我已經嘗試了以下,但不起作用,而是打印openssl的「幫助」命令;
certificate = ''' cert string '''
ca_bundle = ''' ca bundle string '''
def ca_valid(cert, ca):
ca_validation = subprocess.Popen(['openssl', 'verify', '-CAfile', ca, cert], stdin=subprocess.PIPE, stdout=subprocess.PIPE, bufsize=1)
ca_validation_output = ca_validation.communicate()[0].strip()
ca_validation.wait()
ca_valid(certificate, ca_bundle)
任何有關我需要進一步研究的指導/線索將不勝感激。
作爲一個簡單的出路,你會考慮使用[tempfile](https://docs.python.org/3/library/tempfile.html)模塊嗎? – wim
也許使用'os.system()'來代替? – baranskistad
你確定你有這個命令嗎?當我運行直接在終端中創建的命令時,我也會得到openssl的使用幫助字符串。 – xgord