Skip to the content.

Home

jc.parsers.x509_crl

jc - JSON Convert X.509 Certificate Revocation List format file parser

This parser will convert DER and PEM encoded X.509 certificate revocation list files.

Usage (cli):

$ cat certificateRevocationList.pem | jc --x509-crl
$ cat certificateRevocationList.der | jc --x509-crl

Usage (module):

import jc
result = jc.parse('x509_crl', x509_crl_file_output)

Schema:

[
  {
    "tbs_cert_list": {
      "version":                      string,
      "signature": {
        "algorithm":                  string,
        "parameters":                 string/null
      },
      "issuer": {
        "organization_name":          string,
        "organizational_unit_name":   string,
        "common_name":                string
      },
      "this_update":                  integer,  # [1]
      "next_update":                  integer,  # [1]
      "revoked_certificates": [
        {
          "user_certificate":         integer,
          "revocation_date":          integer,  # [1]
          "crl_entry_extensions": [
            {
              "extn_id":              string,
              "critical":             boolean,
              "extn_value":           string/array,  # [2]
              "extn_value_iso":       string
            }
          ],
          "revocation_date_iso":      string
        }
      ],
      "crl_extensions": [
        {
          "extn_id":                  string,
          "critical":                 boolean,
          "extn_value":               array/object/string/integer  # [2]
        }
      ],
      "this_update_iso":              string,
      "next_update_iso":              string
    },
    "signature_algorithm": {
      "algorithm":                    string,
      "parameters":                   string/null
    },
    "signature":                      string  # [0]
  }
]

[0] in colon-delimited hex notation
[1] time-zone-aware (UTC) epoch timestamp
[2] See below for well-known Extension schemas:

    Basic Constraints:
    {
      "extn_id":                          "basic_constraints",
      "critical":                         boolean,
      "extn_value": {
        "ca":                             boolean,
        "path_len_constraint":            string/null
      }
    }

    Key Usage:
    {
      "extn_id":                          "key_usage",
      "critical":                         boolean,
      "extn_value": [
                                          string
      ]
    }

    Key Identifier:
    {
      "extn_id":                          "key_identifier",
      "critical":                         boolean,
      "extn_value":                       string  # [0]
    }

    Authority Key Identifier:
    {
      "extn_id":                          "authority_key_identifier",
      "critical":                         boolean,
      "extn_value": {
        "key_identifier":                 string,  # [0]
        "authority_cert_issuer":          array/null,
        "authority_cert_issuer_general_names": [  # [3]
          {
            "type":                       string,  # [4]
            "value":                      string/object
          }
        ],
        "authority_cert_serial_number":   string/null
      }
    }

    Subject Alternative Name:
    {
      "extn_id":                          "subject_alt_name",
      "critical":                         boolean,
      "extn_value": [
                                          string/object
      ],
      "extn_value_general_names": [  # [3]
        {
          "type":                         string,  # [4]
          "value":                        string/object
        }
      ]
    }

    Issuer Alternative Name:
    {
      "extn_id":                          "issuer_alt_name",
      "critical":                         boolean,
      "extn_value": [
                                          string/object
      ],
      "extn_value_general_names": [  # [3]
        {
          "type":                         string,  # [4]
          "value":                        string/object
        }
      ]
    }

    Certificate Policies:
    {
      "extn_id":                          "certificate_policies",
      "critical":                         boolean,
      "extn_value": [
        {
          "policy_identifier":            string,
          "policy_qualifiers": [          array or null
            {
              "policy_qualifier_id":      string,
              "qualifier":                string
            }
          ]
        }
      ]
    }

    Signed Certificate Timestamp List:
    {
      "extn_id":                    "signed_certificate_timestamp_list",
      "critical":                   boolean,
      "extn_value":                 string  # [0]
    }

    Authority Information Access:
    {
      "extn_id":                          "authority_information_access",
      "critical":                         boolean,
      "extn_value": [
        {
          "access_method":                string,
          "access_location":              string/object,
          "access_location_type":         string  # [4]
        }
      ]
    }

    Freshest CRL:
    {
      "extn_id":                          "freshest_crl",
      "critical":                         boolean,
      "extn_value": [
        {
          "distribution_point": [
                                          string/object
          ],
          "distribution_point_general_names": [  # [3]
            {
              "type":                     string,  # [4]
              "value":                    string/object
            }
          ],
          "reasons":                      array/null,
          "crl_issuer": [
                                          string/object
          ],
          "crl_issuer_general_names": [  # [3]
            {
              "type":                     string,  # [4]
              "value":                    string/object
            }
          ]
        }
      ]
    }

    Issuing Distribution Point:
    {
      "extn_id":                          "issuing_distribution_point",
      "critical":                         boolean,
      "extn_value": {
        "distribution_point": [
                                          string/object
        ],
        "distribution_point_general_names": [  # [3]
          {
            "type":                       string,  # [4]
            "value":                      string/object
          }
        ],
        "only_contains_user_certs":       boolean,
        "only_contains_ca_certs":         boolean,
        "only_some_reasons":              array/null,
        "indirect_crl":                   boolean,
        "only_contains_attribute_certs":  boolean
      }
    }

    Certificate Issuer:
    {
      "extn_id":                          "certificate_issuer",
      "critical":                         boolean,
      "extn_value": [
                                          string/object
      ],
      "extn_value_general_names": [  # [3]
        {
          "type":                         string,  # [4]
          "value":                        string/object
        }
      ]
    }

[3] present when the field before it is a list of GeneralNames
[4] GeneralName type: dns_name, rfc822_name, uniform_resource_identifier,
    ip_address, directory_name, registered_id, other_name, x400_address
    or edi_party_name

Examples:

$ cat sample-crl.pem | jc --x509-crl -p
[
  {
    "tbs_cert_list": {
      "version": "v2",
      "signature": {
        "algorithm": "sha1_rsa",
        "parameters": null
      },
      "issuer": {
        "organization_name": "Sample Signer Organization",
        "organizational_unit_name": "Sample Signer Unit",
        "common_name": "Sample Signer Cert"
      },
      "this_update": 1361183520,
      "next_update": 1361184120,
      "revoked_certificates": [
        {
          "user_certificate": 1341767,
          "revocation_date": 1361182932,
          "crl_entry_extensions": [
            {
              "extn_id": "crl_reason",
              "critical": false,
              "extn_value": "affiliation_changed"
            },
            {
              "extn_id": "invalidity_date",
              "critical": false,
              "extn_value": 1361182920,
              "extn_value_iso": "2013-02-18T10:22:00+00:00"
            }
          ],
          "revocation_date_iso": "2013-02-18T10:22:12+00:00"
        },
        {
          "user_certificate": 1341768,
          "revocation_date": 1361182942,
          "crl_entry_extensions": [
            {
              "extn_id": "crl_reason",
              "critical": false,
              "extn_value": "certificate_hold"
            },
            {
              "extn_id": "invalidity_date",
              "critical": false,
              "extn_value": 1361182920,
              "extn_value_iso": "2013-02-18T10:22:00+00:00"
            }
          ],
          "revocation_date_iso": "2013-02-18T10:22:22+00:00"
        },
        {
          "user_certificate": 1341769,
          "revocation_date": 1361182952,
          "crl_entry_extensions": [
            {
              "extn_id": "crl_reason",
              "critical": false,
              "extn_value": "superseded"
            },
            {
              "extn_id": "invalidity_date",
              "critical": false,
              "extn_value": 1361182920,
              "extn_value_iso": "2013-02-18T10:22:00+00:00"
            }
          ],
          "revocation_date_iso": "2013-02-18T10:22:32+00:00"
        },
        {
          "user_certificate": 1341770,
          "revocation_date": 1361182962,
          "crl_entry_extensions": [
            {
              "extn_id": "crl_reason",
              "critical": false,
              "extn_value": "key_compromise"
            },
            {
              "extn_id": "invalidity_date",
              "critical": false,
              "extn_value": 1361182920,
              "extn_value_iso": "2013-02-18T10:22:00+00:00"
            }
          ],
          "revocation_date_iso": "2013-02-18T10:22:42+00:00"
        },
        {
          "user_certificate": 1341771,
          "revocation_date": 1361182971,
          "crl_entry_extensions": [
            {
              "extn_id": "crl_reason",
              "critical": false,
              "extn_value": "cessation_of_operation"
            },
            {
              "extn_id": "invalidity_date",
              "critical": false,
              "extn_value": 1361182920,
              "extn_value_iso": "2013-02-18T10:22:00+00:00"
            }
          ],
          "revocation_date_iso": "2013-02-18T10:22:51+00:00"
        }
      ],
      "crl_extensions": [
        {
          "extn_id": "authority_key_identifier",
          "critical": false,
          "extn_value": {
            "key_identifier": "be:12:01:cc:aa:ea:11:80:da:2e:ad:b2...",
            "authority_cert_issuer": null,
            "authority_cert_serial_number": null
          }
        },
        {
          "extn_id": "crl_number",
          "critical": false,
          "extn_value": 3
        }
      ],
      "this_update_iso": "2013-02-18T10:32:00+00:00",
      "next_update_iso": "2013-02-18T10:42:00+00:00"
    },
    "signature_algorithm": {
      "algorithm": "sha1_rsa",
      "parameters": null
    },
    "signature": "42:21:be:81:f1:c3:79:76:66:5b:ce:21:13:8a:68:a..."
  }
]

parse

def parse(data: str | bytes,
          raw: bool = False,
          quiet: bool = False) -> List[Dict]

Main text parsing function

Parameters:

data:        (string or bytes) text or binary data to parse
raw:         (boolean) unprocessed output if True
quiet:       (boolean) suppress warning messages if True

Returns:

List of Dictionaries. Raw or processed structured data.

Parser Information

Compatibility: linux, darwin, cygwin, win32, aix, freebsd

Source: jc/parsers/x509_crl.py

Version 1.1 by Kelly Brazil (kellyjonbrazil@gmail.com)