x509dump.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #!/usr/bin/python
  2. #
  3. # Read ASN.1/PEM X.509 certificates on stdin, parse each into plain text,
  4. # then build substrate from it
  5. #
  6. from pyasn1.codec.der import decoder, encoder
  7. from pyasn1_modules import rfc2459, pem
  8. import sys
  9. if len(sys.argv) != 1:
  10. print("""Usage:
  11. $ cat CACertificate.pem | %s
  12. $ cat userCertificate.pem | %s""" % (sys.argv[0], sys.argv[0]))
  13. sys.exit(-1)
  14. certType = rfc2459.Certificate()
  15. certCnt = 0
  16. while 1:
  17. idx, substrate = pem.readPemBlocksFromFile(
  18. sys.stdin, ('-----BEGIN CERTIFICATE-----',
  19. '-----END CERTIFICATE-----')
  20. )
  21. if not substrate:
  22. break
  23. cert, rest = decoder.decode(substrate, asn1Spec=certType)
  24. if rest: substrate = substrate[:-len(rest)]
  25. print(cert.prettyPrint())
  26. assert encoder.encode(cert, defMode=False) == substrate or \
  27. encoder.encode(cert, defMode=True) == substrate, \
  28. 'cert recode fails'
  29. certCnt = certCnt + 1
  30. print('*** %s PEM cert(s) de/serialized' % certCnt)