Ich versuche, ein Zertifikat mit einer CA-Bundle-Datei zu validieren. Der ursprüngliche Bash-Befehl benötigt zwei Dateiargumente wie diesen;Unterprozessbefehl mit zwei String-Eingaben ausführen
openssl verify -CAfile ca-ssl.ca cert-ssl.crt
Ich versuche, herauszufinden, wie man den obigen Befehl in Python subprocess läuft ca-ssl.ca und cert-ssl.crt als variable Strings während mit (im Gegensatz zu Dateien im Gegensatz).
Wenn ich den Befehl mit Variablen (anstelle von Dateien) in bash ausgeführt würde, dann würde dies funktionieren;
ca_value=$(<ca-ssl.ca)
cert_value=$(<cert-ssl.crt)
openssl verify -CAfile <(echo "$ca_value") <(echo "$cert_value")
Aber ich bin zu kämpfen, herauszufinden, wie mit Python die oben genannten zu tun, vorzugsweise ohne shell=True
verwenden zu müssen. Ich habe folgendes versucht, funktioniert aber nicht und druckt stattdessen 'help' Befehle für 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)
Alle Hinweise/Hinweise zu dem, was ich weiter untersuchen muss, wären willkommen.
Als einen einfachen Ausweg würden Sie in Betracht ziehen, das Modul [tempfile] (https://docs.python.org/3/library/tempfile.html) zu verwenden? – wim
Vielleicht verwenden Sie stattdessen 'os.system()'? – baranskistad
Sind Sie sicher, dass Sie den Befehl richtig haben? Wenn ich den Befehl ausführe, der von Ihrer Liste direkt in einem Terminal erstellt werden würde, erhalte ich auch die Verwendungshilfe-Zeichenfolge von openssl. – xgord