Changeset - c033bb4b0a05
[Not reviewed]
0 3 0
Branko Majic (branko) - 8 years ago 2018-03-01 15:42:57
branko@majic.rs
GC-3: Updated naming convention for CAs (append CA at end for usability purposes).
3 files changed with 12 insertions and 12 deletions:
0 comments (0 inline, 0 general)
functional_tests/test_init.py
Show inline comments
 
@@ -87,17 +87,17 @@ def test_initialisation_on_fresh_directory(tmpdir):
 
    subject_dn, _, _ = run_command('openssl', 'x509', '-noout', '-subject', '-in', '.gimmecert/ca/level1.cert.pem')
 
    issuer_dn = issuer_dn.replace('issuer=', '', 1)
 
    subject_dn = subject_dn.replace('subject=', '', 1)
 

	
 
    # He notices that the issuer and subject DN are identical (since
 
    # it's a root CA certificate), and can also see that the subject
 
    # DN has just the CN with working directory's name in it.
 
    assert issuer_dn == subject_dn
 
    assert subject_dn.rstrip() == 'CN = %s Level 1' % tmpdir.basename
 
    assert subject_dn.rstrip() == 'CN = %s Level 1 CA' % tmpdir.basename
 

	
 
    # John has a quick look at generated certificate and chain, only
 
    # to realise they are identical.
 
    with open(".gimmecert/ca/level1.cert.pem") as cert_file, open(".gimmecert/ca/chain-full.cert.pem") as chain_file:
 
        assert cert_file.read() == chain_file.read()
 

	
 

	
 
def test_initialisation_on_existing_directory(tmpdir):
 
@@ -158,17 +158,17 @@ def test_initialisation_with_custom_base_name(tmpdir):
 
    issuer_dn, _, _ = run_command('openssl', 'x509', '-noout', '-issuer', '-in', '.gimmecert/ca/level1.cert.pem')
 
    subject_dn, _, _ = run_command('openssl', 'x509', '-noout', '-subject', '-in', '.gimmecert/ca/level1.cert.pem')
 
    issuer_dn = issuer_dn.replace('issuer=', '', 1)
 
    subject_dn = subject_dn.replace('subject=', '', 1)
 

	
 
    # To his delight, both the issuer and subject DN are identical,
 
    # and now they are based on his custom-provided name instead of
 
    # project name.
 
    assert issuer_dn.rstrip() == subject_dn.rstrip() == "CN = My Project Level 1"
 
    assert issuer_dn.rstrip() == subject_dn.rstrip() == "CN = My Project Level 1 CA"
 
    assert tmpdir.basename not in issuer_dn
 

	
 

	
 
def test_initialisation_with_custom_hierarchy_depth(tmpdir):
 
    # John is now involved in a project where the CA hierarchy used
 
    # for issuing certificates is supposed to be deeper than 1. In
 
    # other words, he needs Level 1 CA -> Level 2 CA -> Level 3 CA ->
 
    # end entity certificates.
 
@@ -247,19 +247,19 @@ def test_initialisation_with_custom_hierarchy_depth(tmpdir):
 
    issuer_dn3 = issuer_dn3.replace('issuer=', '', 1).rstrip().replace(' /CN=', 'CN = ', 1)  # OpenSSL 1.0 vs 1.1 formatting
 
    subject_dn3 = subject_dn3.replace('subject=', '', 1).rstrip().replace(' /CN=', 'CN = ', 1)  # OpenSSL 1.0 vs 1.1 formatting
 

	
 
    # He notices that the all certificates seem to be have been issued
 
    # by correct entity.
 
    assert issuer_dn1 == subject_dn1
 
    assert issuer_dn2 == subject_dn1
 
    assert issuer_dn3 == subject_dn2
 
    assert subject_dn1 == 'CN = %s Level 1' % tmpdir.basename
 
    assert subject_dn2 == 'CN = %s Level 2' % tmpdir.basename
 
    assert subject_dn3 == 'CN = %s Level 3' % tmpdir.basename
 
    assert subject_dn1 == 'CN = %s Level 1 CA' % tmpdir.basename
 
    assert subject_dn2 == 'CN = %s Level 2 CA' % tmpdir.basename
 
    assert subject_dn3 == 'CN = %s Level 3 CA' % tmpdir.basename
 

	
 
    # John opens-up the chain file, and observes that all certificates
 
    # seem to be contained within.
 
    with open(".gimmecert/ca/level1.cert.pem", "r") as level1_cert_file:
 
        level1_cert = level1_cert_file.read()
 
    with open(".gimmecert/ca/level2.cert.pem", "r") as level2_cert_file:
 
        level2_cert = level2_cert_file.read()
 
    with open(".gimmecert/ca/level3.cert.pem", "r") as level3_cert_file:
gimmecert/crypto.py
Show inline comments
 
@@ -157,17 +157,17 @@ def generate_ca_hierarchy(base_name, depth):
 
    ]
 

	
 
    # We have not issued yet any certificate.
 
    issuer_dn = None
 
    issuer_private_key = None
 

	
 
    for level in range(1, depth+1):
 
        # Generate info for the new CA.
 
        dn = get_dn("%s Level %d" % (base_name, level))
 
        dn = get_dn("%s Level %d CA" % (base_name, level))
 
        private_key = generate_private_key()
 

	
 
        # First certificate issued needs to be self-signed.
 
        issuer_dn = issuer_dn or dn
 
        issuer_private_key = issuer_private_key or private_key
 

	
 
        certificate = issue_certificate(issuer_dn, dn, issuer_private_key, private_key.public_key(), not_before, not_after, extensions)
 
        hierarchy.append((private_key, certificate))
tests/test_crypto.py
Show inline comments
 
@@ -135,34 +135,34 @@ def test_generate_ca_hierarchy_returns_list_of_private_key_certificate_pairs():
 

	
 

	
 
def test_generate_ca_hierarchy_subject_dns_have_correct_value():
 
    base_name = 'My Project'
 
    depth = 3
 

	
 
    level1, level2, level3 = [certificate for _, certificate in gimmecert.crypto.generate_ca_hierarchy(base_name, depth)]
 

	
 
    assert level1.subject == cryptography.x509.Name(gimmecert.crypto.get_dn('My Project Level 1'))
 
    assert level2.subject == cryptography.x509.Name(gimmecert.crypto.get_dn('My Project Level 2'))
 
    assert level3.subject == cryptography.x509.Name(gimmecert.crypto.get_dn('My Project Level 3'))
 
    assert level1.subject == cryptography.x509.Name(gimmecert.crypto.get_dn('My Project Level 1 CA'))
 
    assert level2.subject == cryptography.x509.Name(gimmecert.crypto.get_dn('My Project Level 2 CA'))
 
    assert level3.subject == cryptography.x509.Name(gimmecert.crypto.get_dn('My Project Level 3 CA'))
 

	
 

	
 
def test_generate_ca_hierarchy_issuer_dns_have_correct_value():
 
    base_name = 'My Project'
 
    depth = 3
 

	
 
    hierarchy = gimmecert.crypto.generate_ca_hierarchy(base_name, depth)
 

	
 
    level1_key, level1_certificate = hierarchy[0]
 
    level2_key, level2_certificate = hierarchy[1]
 
    level3_key, level3_certificate = hierarchy[2]
 

	
 
    assert level1_certificate.issuer == cryptography.x509.Name(gimmecert.crypto.get_dn('My Project Level 1'))
 
    assert level2_certificate.issuer == cryptography.x509.Name(gimmecert.crypto.get_dn('My Project Level 1'))
 
    assert level3_certificate.issuer == cryptography.x509.Name(gimmecert.crypto.get_dn('My Project Level 2'))
 
    assert level1_certificate.issuer == cryptography.x509.Name(gimmecert.crypto.get_dn('My Project Level 1 CA'))
 
    assert level2_certificate.issuer == cryptography.x509.Name(gimmecert.crypto.get_dn('My Project Level 1 CA'))
 
    assert level3_certificate.issuer == cryptography.x509.Name(gimmecert.crypto.get_dn('My Project Level 2 CA'))
 

	
 

	
 
def test_generate_ca_hierarchy_private_keys_match_with_public_keys_in_certificates():
 
    base_name = 'My Project'
 
    depth = 3
 

	
 
    hierarchy = gimmecert.crypto.generate_ca_hierarchy(base_name, depth)
 

	
0 comments (0 inline, 0 general)