Exporting and processing scan results in JSON¶
The result of SSLyze scans can be serialized to JSON for further processing. SSLyze also provides a helper class to parse JSON scan results; it can be used to process the results of SSLyze scans in a separate Python program.
A schema of the JSON output is available in the code repository at ./json_output_schema.json.
JSON output when using the CLI¶
When using the CLI, the scan results can be exported to a JSON file using the --json_out
option:
$ python -m sslyze www.google.com www.facebook.com --json_out=result.json
The generated JSON file can then be parsed using the SslyzeOutputAsJson.from_file()
method:
def example_json_result_parsing() -> None:
# SSLyze scan results serialized to JSON were saved to this file using --json_out
results_as_json_file = Path(__file__).parent / "tests" / "json_tests" / "sslyze_output.json"
results_as_json = results_as_json_file.read_text()
# These results can be parsed
parsed_results = SslyzeOutputAsJson.parse_raw(results_as_json)
# Making it easy to do post-processing and inspection of the results
print("The following servers were scanned:")
for server_scan_result in parsed_results.server_scan_results:
print(f"\n****{server_scan_result.server_location.hostname}:{server_scan_result.server_location.port}****")
if server_scan_result.scan_status == ServerScanStatusEnum.ERROR_NO_CONNECTIVITY:
print(f"That scan failed with the following error:\n{server_scan_result.connectivity_error_trace}")
continue
assert server_scan_result.scan_result
certinfo_attempt = server_scan_result.scan_result.certificate_info
if certinfo_attempt.status == ScanCommandAttemptStatusEnum.ERROR:
_print_failed_scan_command_attempt(certinfo_attempt) # type: ignore
else:
certinfo_result = server_scan_result.scan_result.certificate_info.result
assert certinfo_result
for cert_deployment in certinfo_result.certificate_deployments:
print(f" SHA1 of leaf certificate: {cert_deployment.received_certificate_chain[0].fingerprint_sha1}")
print("")
The resulting Python object then contains the scan results. Type annotations are available for all fields, thereby making it easier to process the results.