Skip to content

Instantly share code, notes, and snippets.

@dreizehnutters
Created June 29, 2023 12:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dreizehnutters/56112df1e2132b6c96261c4bcc240dec to your computer and use it in GitHub Desktop.
Save dreizehnutters/56112df1e2132b6c96261c4bcc240dec to your computer and use it in GitHub Desktop.
convert certipy json to csv
import json
import csv
from sys import argv
def flatten_dict(dictionary, parent_key='', sep='.'):
items = []
for key, value in dictionary.items():
new_key = f"{parent_key}{sep}{key}" if parent_key else key
if isinstance(value, dict):
if "Permissions" in key:
for sub_key, sub_value in value.items():
if 'Enrollment Permissions' in sub_key:
items.append((sub_key, '\n'.join(sub_value['Enrollment Rights'])))
elif 'Object Control Permissions' in sub_key:
for subsub_key, subsub_value in sub_value.items():
if isinstance(subsub_value, list):
items.append((subsub_key, '\n'.join(subsub_value)))
else:
items.append((subsub_key, subsub_value))
else:
items.append((new_key, ", ".join([f"{key}: {value}" for key, value in value.items()])))
elif isinstance(value, list):
items.append((new_key, '\n'.join(value)))
else:
items.append((new_key, value))
return dict(items)
def dict_to_csv(data_dict, output_file, column_order):
with open(output_file, 'w', newline='') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=column_order, extrasaction='ignore', delimiter=';', quoting=csv.QUOTE_ALL)
writer.writeheader()
writer.writerows([flatten_dict(data_dict[data]) for data in data_dict])
if __name__ == '__main__':
input_file = argv[1]
with open(input_file, 'r') as file:
json_data = json.load(file)
all_templates = json_data['Certificate Templates']
column_order = ['Template Name', 'Display Name', 'Certificate Authorities', 'Enabled', 'Client Authentication', 'Enrollment Agent', 'Any Purpose', 'Enrollee Supplies Subject', 'Certificate Name Flag', 'Enrollment Flag', 'Private Key Flag', 'Extended Key Usage', 'Requires Manager Approval', 'Requires Key Archival', 'Authorized Signatures Required', 'Validity Period', 'Renewal Period', 'Minimum RSA Key Length', 'Enrollment Permissions', 'Owner', 'Write Owner Principals', 'Write Dacl Principals', 'Write Property Principals','[!] Vulnerabilities']
dict_to_csv(all_templates, f"{input_file.split('.')[0]}.csv", column_order)
@dreizehnutters
Copy link
Author

from

image

to

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment