import re import base64 import sys import subprocess import tempfile certRegex = r'Certificate>(.*?)<' beginText = "-----BEGIN CERTIFICATE-----\n" endText = "-----END CERTIFICATE-----" def extractCert(SAMLResponseFile): with open(SAMLResponseFile) as f: SAMLResponse = f.read() responseXML = base64.b64decode(SAMLResponse) if responseXML[0] == '<': return re.findall(certRegex, responseXML)[0] else: return re.findall(certRegex, SAMLResponse)[0] def prettifyCert(rawX509): i = 0 prettyString = "" totalLength = len(rawX509) for i in range(64, totalLength, 64): prettyString += rawX509[i-64:i] + "\n" diff = totalLength - i if diff < 64 and diff % 64 > 0: prettyString += rawX509[i:totalLength] + "\n" with tempfile.NamedTemporaryFile(delete=False) as f: f.write(beginText + prettyString + endText) return f.name def findFingerprint(prettyCertFile): subprocess.call(["openssl", "x509", "-noout", "-in", "{prettyCertFile}".format(prettyCertFile=prettyCertFile), "-fingerprint"]) if __name__ == "__main__": try: X509 = extractCert(sys.argv[1]) prettyCertFile = prettifyCert(X509) findFingerprint(prettyCertFile) except IndexError: print "Please specify a filename to extract a fingerprint from.\n" \ "usage: python fingerprint.py somefile"