|
@@ -0,0 +1,69 @@
|
|
|
+"""Create a SSL certificate.
|
|
|
+
|
|
|
+Requirements: OpenSSL.
|
|
|
+"""
|
|
|
+
|
|
|
+import argparse
|
|
|
+import logging
|
|
|
+import os
|
|
|
+
|
|
|
+
|
|
|
+def get_paths(path):
|
|
|
+ """"""
|
|
|
+ return [
|
|
|
+ os.path.abspath(path) + string
|
|
|
+ for string in (".crt", ".key", "csr.cnf")
|
|
|
+ ]
|
|
|
+
|
|
|
+
|
|
|
+def main():
|
|
|
+ cli_parser = argparse.ArgumentParser(description='Create SSL certificate',
|
|
|
+ allow_abbrev=False)
|
|
|
+ cli_parser.add_argument('-n', '--name',
|
|
|
+ type=str,
|
|
|
+ default=None,
|
|
|
+ required=False,
|
|
|
+ help='Certificate, key and configuration file name')
|
|
|
+ cli_parser.add_argument('-f', '--force', '--overwrite',
|
|
|
+ action='store_true',
|
|
|
+ help='Overwrite certificate and key if they exist')
|
|
|
+ arguments = vars(cli_parser.parse_args())
|
|
|
+ name = arguments['name']
|
|
|
+ if name is None:
|
|
|
+ try:
|
|
|
+ from config import name
|
|
|
+ except ImportError:
|
|
|
+ name = None
|
|
|
+ while name is None or not os.access(os.path.dirname(os.path.abspath(name)),
|
|
|
+ os.W_OK):
|
|
|
+ try:
|
|
|
+ name = input(
|
|
|
+ "Enter a valid file name for certificate, key and "
|
|
|
+ "configuration file. Directory must be writeable.\n"
|
|
|
+ "\t\t"
|
|
|
+ )
|
|
|
+ except KeyboardInterrupt:
|
|
|
+ print()
|
|
|
+ logging.error("Aborting...")
|
|
|
+ return
|
|
|
+ certificate_path, key_path, configuration_path = get_paths(
|
|
|
+ name
|
|
|
+ )
|
|
|
+ if not os.access(os.path.dirname(certificate_path), os.W_OK):
|
|
|
+ logging.error(f"Invalid path `{certificate_path}`!")
|
|
|
+ return
|
|
|
+ if any(
|
|
|
+ os.path.isfile(path)
|
|
|
+ for path in (certificate_path, key_path, configuration_path)
|
|
|
+ ) and not arguments['force'] and not input(
|
|
|
+ "Do you want to overwrite existing certificate, key and "
|
|
|
+ "configuration file?"
|
|
|
+ "\n[Y]es or [N]o\t\t\t\t"
|
|
|
+ ).lower().startswith('y'):
|
|
|
+ logging.error("Interrupted. Provide a different --name.")
|
|
|
+ return
|
|
|
+ print(certificate_path)
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ main()
|