26 lines
663 B
Python
26 lines
663 B
Python
|
from sys import argv
|
||
|
from subprocess import Popen, PIPE, STDOUT
|
||
|
|
||
|
p = Popen(["openssl", "s_client", "-host", argv[1], "-port", "443", "-prexit", "-showcerts"], stdin=PIPE, stdout=PIPE, stderr=STDOUT)
|
||
|
stdout = p.communicate(input=b'\n')[0]
|
||
|
data = stdout.decode()
|
||
|
|
||
|
certs = []
|
||
|
cert = ""
|
||
|
capturing = False
|
||
|
for line in data.split('\n'):
|
||
|
if line == '-----BEGIN CERTIFICATE-----':
|
||
|
capturing = True
|
||
|
|
||
|
if capturing:
|
||
|
cert = "{0}{1}\n".format(cert, line)
|
||
|
|
||
|
if line == '-----END CERTIFICATE-----':
|
||
|
capturing = False
|
||
|
certs.append(cert)
|
||
|
cert = ""
|
||
|
|
||
|
with open(argv[2], 'w') as f:
|
||
|
for cert in set(certs):
|
||
|
f.write(cert)
|