docs: def read_certificate(certificate):
      '''
      Returns a dict containing details of a certificate. Input can be a PEM
      string or file path.
  
      certificate:
          The certificate to be read. Can be a path to a certificate file, or
          a string containing the PEM formatted text of the certificate.
  
      CLI Example:
  
      .. code-block:: bash
  
          salt '*' x509.read_certificate /etc/pki/mycert.crt
      '''
      cert = _get_certificate_obj(certificate)
  
      ret = {
          # X509 Version 3 has a value of 2 in the field.
          # Version 2 has a value of 1.
          # https://tools.ietf.org/html/rfc5280#section-4.1.2.1
          'Version': cert.get_version() + 1,
          # Get size returns in bytes. The world thinks of key sizes in bits.
          'Key Size': cert.get_pubkey().size() * 8,
          'Serial Number': _dec2hex(cert.get_serial_number()),
          'SHA-256 Finger Print': _pretty_hex(cert.get_fingerprint(md='sha256')),
          'MD5 Finger Print': _pretty_hex(cert.get_fingerprint(md='md5')),
          'SHA1 Finger Print': _pretty_hex(cert.get_fingerprint(md='sha1')),
          'Subject': _parse_subject(cert.get_subject()),
          'Subject Hash': _dec2hex(cert.get_subject().as_hash()),
          'Issuer': _parse_subject(cert.get_issuer()),
          'Issuer Hash': _dec2hex(cert.get_issuer().as_hash()),
          'Not Before':
          cert.get_not_before().get_datetime().strftime('%Y-%m-%d %H:%M:%S'),
          'Not After':
          cert.get_not_after().get_datetime().strftime('%Y-%m-%d %H:%M:%S'),
          'Public Key': get_public_key(cert)
      }
  
      exts = OrderedDict()
      for ext_index in range(0, cert.get_ext_count()):
          ext = cert.get_ext_at(ext_index)
          name = ext.get_name()
          val = ext.get_value()
          if ext.get_critical():
              val = 'critical ' + val
          exts[name] = val
  
      if exts:
          ret['X509v3 Extensions'] = exts
  
      return ret