diff --git a/.gitignore b/.gitignore index f5c00c1..eaab246 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ certs/ +certs_flat/ data/ # Python ignores diff --git a/README.md b/README.md index 22fbc41..270a069 100644 --- a/README.md +++ b/README.md @@ -34,4 +34,11 @@ certs/ chain.pem fullchain.pem privkey.pem +certs_flat/ + example.com.crt + example.com.key + example.com.chain.pem + sub.example.nl.crt + sub.example.nl.key + sub.example.nl.chain.pem ``` diff --git a/extractor.py b/extractor.py index d7d62fc..3779633 100644 --- a/extractor.py +++ b/extractor.py @@ -53,18 +53,42 @@ class Handler(FileSystemEventHandler): with open(directory + 'fullchain.pem', 'w') as f: f.write(fullchain) + # Write private key, certificate and chain to flat files + directory = 'certs_flat/' + + with open(directory + c['Certificate']['Domain'] + '.key', 'w') as f: + f.write(privatekey) + with open(directory + c['Certificate']['Domain'] + '.crt', 'w') as f: + f.write(fullchain) + with open(directory + c['Certificate']['Domain'] + '.chain.pem', 'w') as f: + f.write(chain) + + if c['Domains']['SANs']: + for name in c['Domains']['SANs']: + with open(directory + name + '.key', 'w') as f: + f.write(privatekey) + with open(directory + name + '.crt', 'w') as f: + f.write(fullchain) + with open(directory + name + '.chain.pem', 'w') as f: + f.write(chain) + print('Extracted certificate for: ' + c['Domains']['Main'] + (', ' + ', '.join(c['Domains']['SANs']) if c['Domains']['SANs'] else '')) if __name__ == "__main__": # Determine path to watch path = sys.argv[1] if len(sys.argv) > 1 else './data' - # Create output directory if it doesn't exist + # Create output directories if it doesn't exist try: os.makedirs('certs') except OSError as error: if error.errno != errno.EEXIST: raise + try: + os.makedirs('certs_flat') + except OSError as error: + if error.errno != errno.EEXIST: + raise # Create event handler and observer event_handler = Handler()