Metadata-Version: 2.1 Name: certipy Version: 0.1.3 Summary: Utility to create and sign CAs and certificates Home-page: https://github.com/LLNL/certipy Author: Thomas Mendoza Author-email: mendoza33@llnl.gov License: BSD Keywords: pki ssl tls certificates Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Intended Audience :: Developers Classifier: Topic :: Utilities Classifier: License :: OSI Approved :: BSD License Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.3 Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 Requires-Dist: pyopenssl Provides-Extra: dev Requires-Dist: pytest ; extra == 'dev' Provides-Extra: test Requires-Dist: pytest ; extra == 'test' # Certipy A simple python tool for creating certificate authorities and certificates on the fly. ## Introduction Certipy was made to simplify the certificate creation process. To that end, Certipy exposes methods for creating and managing certificate authorities, certificates, signing and building trust bundles. Behind the scenes Certipy: * Manages records of all certificates it creates * External certs can be imported and managed by Certipy * Maintains signing hierarchy * Persists certificates to files with appropriate permissions ## Usage ### Command line Creating a certificate authority: Certipy defaults to writing certs and certipy.json into a folder called `out` in your current directory. ``` $ certipy foo FILES {'ca': '', 'cert': 'out/foo/foo.crt', 'key': 'out/foo/foo.key'} IS_CA True SERIAL 0 SIGNEES None PARENT_CA ``` Creating and signing a key-cert pair: ``` $ certipy bar --ca-name foo FILES {'ca': 'out/foo/foo.crt', 'key': 'out/bar/bar.key', 'cert': 'out/bar/bar.crt'} IS_CA False SERIAL 0 SIGNEES None PARENT_CA foo ``` Removal: ``` certipy --rm bar Deleted: FILES {'ca': 'out/foo/foo.crt', 'key': 'out/bar/bar.key', 'cert': 'out/bar/bar.crt'} IS_CA False SERIAL 0 SIGNEES None PARENT_CA foo ``` ### Code Creating a certificate authority: ``` from certipy import Certipy certipy = Certipy(store_dir='/tmp') certipy.create_ca('foo') record = certipy.store.get_record('foo') ``` Creating and signing a key-cert pair: ``` certipy.create_signed_pair('bar', 'foo') record = certipy.store.get_record('bar') ``` Creating trust: ``` certipy.create_ca_bundle('ca-bundle.crt') # or to trust specific certs only: certipy.create_ca_bundle_for_names('ca-bundle.crt', ['bar']) ``` Removal: ``` record = certipy.remove_files('bar') ``` Records are dicts with the following structure: ``` { 'serial': 0, 'is_ca': true, 'parent_ca': 'ca_name', 'signees': { 'signee_name': 1 }, 'files': { 'key': 'path/to/key.key', 'cert': 'path/to/cert.crt', 'ca': 'path/to/ca.crt', } } ``` The `signees` will be empty for non-CA certificates. The `signees` field is stored as a python `Counter`. These relationships are used to build trust bundles. Information in Certipy is generally passed around as records which point to actual files. For most `_record` methods, there are generally equivalent `_file` methods that operate on files themselves. The former will only affect records in Certipy's store and the latter will affect both (something happens to the file, the record for it should change, too). ### Release Certipy is released under BSD license. For more details see the LICENSE file. LLNL-CODE-754897