You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
from __future__ import absolute_import, division, print_function
|
|
|
|
__metaclass__ = type
|
|
|
|
|
|
|
|
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)
|