mirror of
https://gitlab.sectorq.eu/jaydee/python.git
synced 2025-12-14 02:34:53 +01:00
bitwarden
This commit is contained in:
67
cert_checker.py
Normal file
67
cert_checker.py
Normal file
@@ -0,0 +1,67 @@
|
||||
import os
|
||||
import subprocess
|
||||
import json
|
||||
import re
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
def get_cert_info(cert_path):
|
||||
# Use openssl command to get certificate subject and expiration date
|
||||
openssl_cmd = [
|
||||
"openssl", "x509", "-noout", "-subject", "-enddate", "-in", cert_path
|
||||
]
|
||||
process = subprocess.Popen(openssl_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
output, _ = process.communicate()
|
||||
|
||||
if process.returncode == 0:
|
||||
# Extract domain name and expiration date from openssl output
|
||||
subject_str, expiration_date_str = map(lambda x: x.split("=", 1)[1].strip(), output.decode("utf-8").split("\n")[:-1])
|
||||
domain_name = subject_str.split("/")[0].replace("CN = ","")
|
||||
expiration_date = datetime.strptime(expiration_date_str, "%b %d %H:%M:%S %Y %Z")
|
||||
days_remaining = (expiration_date - datetime.now()).days
|
||||
return {"path": cert_path,"domain": domain_name, "expiration_date": expiration_date_str, "days_remaining": days_remaining}
|
||||
else:
|
||||
return None
|
||||
|
||||
def check_and_write_cert_info(directory_path, output_json_path):
|
||||
cert_info_list = []
|
||||
rel_files = []
|
||||
for root, _, files in os.walk(directory_path):
|
||||
#print(files)
|
||||
for file in files:
|
||||
cfg = directory_path + file
|
||||
search_term = "ssl_certificate "
|
||||
for line in open(cfg, 'r'):
|
||||
if re.search(search_term, line):
|
||||
l = line.split()
|
||||
rel_files.append(l[1].replace(";",""))
|
||||
if line == None:
|
||||
print('no matches found')
|
||||
print(rel_files)
|
||||
# fullchain_pem_files = [file for file in files if file.lower() == "fullchain.pem"]
|
||||
|
||||
|
||||
|
||||
for fullchain_pem_file in rel_files:
|
||||
|
||||
fullchain_pem_file = fullchain_pem_file.replace("/data/","/share/docker_data/nginx/data/")
|
||||
fullchain_pem_file = fullchain_pem_file.replace("/etc/letsencrypt/","/share/docker_data/nginx/letsencrypt/")
|
||||
print(f"Checking {fullchain_pem_file}")
|
||||
cert_info = get_cert_info(fullchain_pem_file)
|
||||
|
||||
if cert_info:
|
||||
cert_info_list.append(cert_info)
|
||||
|
||||
# Write the cert info to a JSON file
|
||||
with open(output_json_path, 'w') as json_file:
|
||||
json.dump(cert_info_list, json_file, indent=2)
|
||||
print(json.dumps(cert_info_list))
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Specify the directory path you want to check recursively
|
||||
directory_to_check = "/share/docker_data/nginx/data/nginx/proxy_host/"
|
||||
|
||||
# Specify the output JSON file path
|
||||
output_json_path = "/tmp/cert_info.json"
|
||||
|
||||
# Check for fullchain.pem files and write cert info to JSON file
|
||||
check_and_write_cert_info(directory_to_check, output_json_path)
|
||||
Reference in New Issue
Block a user