Exemple #1
0
def setup_module(module):
    print("setup_module    module:%s" % module.__name__)
    TestEnv.init()
    TestEnv.apache_err_reset()
    TestEnv.APACHE_CONF_SRC = "data/test_conf_store"
    TestEnv.install_test_conf(None)
    assert TestEnv.apache_start() == 0
Exemple #2
0
    def test_310_400(self):
        # test case: add dns name on existing valid md
        # setup: create complete md in store
        domain = "test310-400-" + TestConf.dns_uniq
        name = "www." + domain
        assert TestEnv.a2md(["add", name, "test1." + domain])['rv'] == 0
        assert TestEnv.a2md(["update", name, "contacts",
                             "admin@" + name])['rv'] == 0
        assert TestEnv.a2md(["update", name, "agreement",
                             TestEnv.ACME_TOS])['rv'] == 0
        assert TestEnv.apache_start() == 0
        # setup: drive it
        assert TestEnv.a2md(["-vvv", "drive", name])['rv'] == 0
        assert TestEnv.a2md(
            ["list",
             name])['jout']['output'][0]['state'] == TestEnv.MD_S_COMPLETE

        # remove one domain -> status stays COMPLETE
        assert TestEnv.a2md(["update", name, "domains", name])['rv'] == 0
        assert TestEnv.a2md(
            ["list",
             name])['jout']['output'][0]['state'] == TestEnv.MD_S_COMPLETE

        # add other domain -> status INCOMPLETE
        assert TestEnv.a2md(
            ["update", name, "domains", name, "test2." + domain])['rv'] == 0
        assert TestEnv.a2md(
            ["list",
             name])['jout']['output'][0]['state'] == TestEnv.MD_S_INCOMPLETE
 def test_500_104(self):
     # test case: md with one domain, TOS agreement, ACME account and authz challenge
     # setup: create md
     domain = "test500-104-" + TestDrive.dns_uniq
     name = "www." + domain
     self._prepare_md([ name ])
     assert TestEnv.apache_start() == 0
     # setup: create account on server
     run = TestEnv.a2md( ["acme", "newreg", "admin@" + domain], raw=True )
     assert run['rv'] == 0
     acct = re.match("registered: (.*)$", run["stdout"]).group(1)
     # setup: send TOS agreement to server
     assert TestEnv.a2md(["--terms", TestEnv.ACME_TOS, "acme", "agree", acct])['rv'] == 0
     # setup: link md to account
     assert TestEnv.a2md([ "update", name, "account", acct])['rv'] == 0
     # setup: create authz resource, write it into store
     run = TestEnv.a2md( ["-vv", "acme", "authz", acct, name], raw=True )
     assert run['rv'] == 0
     authz_url = re.match("authz: " + name + " (.*)$", run["stdout"]).group(1)
     # TODO: find storage-independent way to modify local authz data
     TestEnv.authz_save(name, json.dumps({
         "account": acct,
         "authorizations": [{
             "domain": name,
             "location": authz_url,
             "state": 0
         }]
         }, indent=2))
     # drive
     assert TestEnv.a2md( [ "-vv", "drive", name ] )['rv'] == 0
     self._check_md_cert([ name ])
    def test_500_107(self):
        # test case: drive again on COMPLETE md, then drive --force
        # setup: prepare md in store
        domain = "test500-107-" + TestDrive.dns_uniq
        name = "www." + domain
        self._prepare_md([ name ])
        assert TestEnv.apache_start() == 0
        # drive
        assert TestEnv.a2md( [ "-vv", "drive", name ] )['rv'] == 0
        self._check_md_cert([ name ])
        orig_cert = CertUtil(TestEnv.path_domain_pubcert(name))

        # drive again
        assert TestEnv.a2md( [ "-vv", "drive", name ] )['rv'] == 0
        self._check_md_cert([ name ])
        cert = CertUtil(TestEnv.path_domain_pubcert(name))
        # check: cert not changed
        assert cert.get_serial() == orig_cert.get_serial()

        # drive --force
        assert TestEnv.a2md( [ "-vv", "drive", "--force", name ] )['rv'] == 0
        self._check_md_cert([ name ])
        cert = CertUtil(TestEnv.path_domain_pubcert(name))
        # check: cert not changed
        assert cert.get_serial() != orig_cert.get_serial()
        # check: previous cert was archived
        cert = CertUtil(TestEnv.path_domain_pubcert( name, archiveVersion=2 ))
        assert cert.get_serial() == orig_cert.get_serial()
Exemple #5
0
    def test_502_107(self):
        # test case: drive again on COMPLETE md, then drive --force
        # setup: prepare md in store
        domain = self.test_domain
        name = "www." + domain
        self._prepare_md([ name ])
        assert TestEnv.apache_start() == 0
        # drive
        assert TestEnv.a2md( [ "-vv", "drive", name ] )['rv'] == 0
        TestEnv.check_md_credentials(name, [ name ])
        orig_cert = CertUtil( TestEnv.store_domain_file(name, 'pubcert.pem'))

        # drive again
        assert TestEnv.a2md( [ "-vv", "drive", name ] )['rv'] == 0
        TestEnv.check_md_credentials(name, [ name ])
        cert = CertUtil( TestEnv.store_domain_file(name, 'pubcert.pem'))
        # check: cert not changed
        assert cert.get_serial() == orig_cert.get_serial()

        # drive --force
        assert TestEnv.a2md( [ "-vv", "drive", "--force", name ] )['rv'] == 0
        TestEnv.check_md_credentials(name, [ name ])
        cert = CertUtil( TestEnv.store_domain_file(name, 'pubcert.pem'))
        # check: cert not changed
        assert cert.get_serial() != orig_cert.get_serial()
        # check: previous cert was archived
        cert = CertUtil(TestEnv.store_archived_file( name, 2, 'pubcert.pem'))
        assert cert.get_serial() == orig_cert.get_serial()
Exemple #6
0
def setup_module(module):
    print("setup_module    module:%s" % module.__name__)
    TestEnv.initv2()
    TestEnv.APACHE_CONF_SRC = "data/test_auto"
    TestEnv.check_acme()
    TestEnv.clear_store()
    TestEnv.install_test_conf()
    assert TestEnv.apache_start() == 0
Exemple #7
0
 def test_502_101(self):
     # test case: md with 2 domains
     domain = self.test_domain
     name = "www." + domain
     self._prepare_md([ name, "test." + domain ])
     assert TestEnv.apache_start() == 0
     # drive
     assert TestEnv.a2md( [ "-vv", "drive", "-c", "http-01", name ] )['rv'] == 0
     TestEnv.check_md_credentials(name, [ name, "test." + domain ])
 def test_500_101(self):
     # test case: md with 2 domains
     domain = "test500-101-" + TestDrive.dns_uniq
     name = "www." + domain
     self._prepare_md([ name, "test." + domain ])
     assert TestEnv.apache_start() == 0
     # drive
     assert TestEnv.a2md( [ "-vv", "drive", "-c", "http-01", name ] )['rv'] == 0
     self._check_md_cert([ name, "test." + domain ])
 def test_500_106(self):
     # test case: drive using HTTPS only challenge
     domain = "test500-106-" + TestDrive.dns_uniq
     name = "www." + domain
     self._prepare_md([ name, "test." + domain ])
     assert TestEnv.apache_start() == 0
     # drive
     assert TestEnv.a2md( [ "-vv", "drive", "-c", "tls-sni-01", name ] )['rv'] == 0
     self._check_md_cert([ name, "test." + domain ])
Exemple #10
0
 def test_500_106(self):
     # Driving an MD with TLS only, without making it known to Apache
     # first will not work, as support for ALPN protocol acme-tls/1 cannot be checked.
     domain = self.test_domain
     name = "www." + domain
     self._prepare_md([name, "test." + domain])
     assert TestEnv.apache_start() == 0
     # drive
     assert TestEnv.a2md(["-vv", "drive", "-c", "tls-alpn-01",
                          name])['rv'] == 1
Exemple #11
0
    def test_7009(self):
        domain = self.test_domain
        dns_list = [domain]

        # prepare md
        conf = HttpdConf(TestAuto.TMP_CONF)
        conf.add_admin("admin@" + domain)
        conf.add_drive_mode("auto")
        conf.add_renew_window("10d")
        conf.add_md(dns_list)
        conf.add_vhost(TestEnv.HTTPS_PORT, domain, aliasList=[], withSSL=True)
        conf.install()

        # restart (-> drive), check that md+cert is in store, TLS is up
        assert TestEnv.apache_restart() == 0
        assert TestEnv.await_completion([domain], 30)
        self._check_md_cert(dns_list)
        cert1 = CertUtil(TestEnv.path_domain_pubcert(domain))
        # fetch cert from server
        cert2 = CertUtil.load_server_cert(TestEnv.HTTPD_HOST,
                                          TestEnv.HTTPS_PORT, domain)
        assert cert1.get_serial() == cert2.get_serial()

        # create self-signed cert, with critical remaining valid duration -> drive again
        CertUtil.create_self_signed_cert([domain], {
            "notBefore": -120,
            "notAfter": 9
        })
        cert3 = CertUtil(TestEnv.path_domain_pubcert(domain))
        assert cert3.get_serial() == 1000
        time.sleep(1)
        assert TestEnv.a2md(["list",
                             domain])['jout']['output'][0]['renew'] == True
        assert TestEnv.apache_restart() == 0
        assert TestEnv.await_completion([domain], 30)

        # fetch cert from server -> self-signed still active, activation of new ACME is delayed
        cert4 = CertUtil.load_server_cert(TestEnv.HTTPD_HOST,
                                          TestEnv.HTTPS_PORT, domain)
        assert cert4.get_serial() == cert3.get_serial()
        time.sleep(1)

        # restart -> new ACME cert becomes active
        assert TestEnv.apache_stop() == 0
        assert TestEnv.apache_start() == 0
        time.sleep(1)
        cert5 = CertUtil.load_server_cert(TestEnv.HTTPD_HOST,
                                          TestEnv.HTTPS_PORT, domain)
        assert cert5.get_serial() != cert3.get_serial()
Exemple #12
0
 def test_500_102(self):
     # Driving an MD with 'tls-alpn-01' challenge without making it known to Apache
     # first will not work, as support for ALPN protocol acme-tls/1 cannot be checked.
     domain = self.test_domain
     name = "www." + domain
     self._prepare_md([name])
     assert TestEnv.apache_start() == 0
     # setup: create account on server
     run = TestEnv.a2md(["acme", "newreg", "admin@" + domain], raw=True)
     assert run['rv'] == 0
     acct = re.match("registered: (.*)$", run["stdout"]).group(1)
     # setup: link md to account
     assert TestEnv.a2md(["update", name, "account", acct])['rv'] == 0
     # drive
     r = TestEnv.a2md(["-v", "drive", "-c", "tls-alpn-01", name]) == 1
Exemple #13
0
 def test_310_401(self):
     # test case: change ca info
     # setup: create complete md in store
     domain = self.test_domain
     name = "www." + domain
     assert TestEnv.a2md(["add", name])['rv'] == 0
     assert TestEnv.a2md([ "update", name, "contacts", "admin@" + name ])['rv'] == 0
     assert TestEnv.a2md([ "update", name, "agreement", TestEnv.ACME_TOS ])['rv'] == 0
     assert TestEnv.apache_start() == 0
     # setup: drive it
     assert TestEnv.a2md( [ "drive", name ] )['rv'] == 0
     assert TestEnv.a2md([ "list", name ])['jout']['output'][0]['state'] == TestEnv.MD_S_COMPLETE
     # setup: change CA URL
     assert TestEnv.a2md([ "update", name, "ca", TestEnv.ACME_URL_DEFAULT ])['rv'] == 0
     # check: state stays COMPLETE
     assert TestEnv.a2md([ "list", name ])['jout']['output'][0]['state'] == TestEnv.MD_S_COMPLETE
 def test_500_102(self):
     # test case: md with one domain, local TOS agreement and ACME account
     # setup: create md
     domain = "test500-102-" + TestDrive.dns_uniq
     name = "www." + domain
     self._prepare_md([ name ])
     assert TestEnv.apache_start() == 0
     # setup: create account on server
     run = TestEnv.a2md( ["acme", "newreg", "admin@" + domain], raw=True )
     assert run['rv'] == 0
     acct = re.match("registered: (.*)$", run["stdout"]).group(1)
     # setup: link md to account
     assert TestEnv.a2md([ "update", name, "account", acct])['rv'] == 0
     # drive
     assert TestEnv.a2md( [ "-vv", "drive", "-c", "tls-sni-01", name ] )['rv'] == 0
     self._check_md_cert([ name ])
Exemple #15
0
    def test_500_100(self):
        # test case: md with one domain
        domain = self.test_domain
        name = "www." + domain
        self._prepare_md([name])
        assert TestEnv.apache_start() == 0
        # drive
        prevMd = TestEnv.a2md(["list", name])['jout']['output'][0]
        assert TestEnv.a2md(["drive", "-c", "http-01", name])['rv'] == 0
        TestEnv.check_md_credentials([name])
        self._check_account_key(name)

        # check archive content
        storeMd = json.loads(
            open(TestEnv.store_archived_file(name, 1, 'md.json')).read())
        for f in [
                'name', 'ca', 'domains', 'contacts', 'renew-mode',
                'renew-window', 'must-staple'
        ]:
            assert storeMd[f] == prevMd[f]

        # check file system permissions:
        TestEnv.check_file_permissions(name)
        # check: challenges removed
        TestEnv.check_dir_empty(TestEnv.store_challenges())
        # check how the challenge resources are answered in sevceral combinations
        result = TestEnv.get_meta(domain, "/.well-known/acme-challenge", False)
        assert result['rv'] == 0
        assert result['http_status'] == 404
        result = TestEnv.get_meta(domain, "/.well-known/acme-challenge/",
                                  False)
        assert result['rv'] == 0
        assert result['http_status'] == 404
        result = TestEnv.get_meta(domain, "/.well-known/acme-challenge/123",
                                  False)
        assert result['rv'] == 0
        assert result['http_status'] == 404
        assert result['rv'] == 0
        cdir = os.path.join(TestEnv.store_challenges(), domain)
        os.makedirs(cdir)
        open(os.path.join(cdir, 'acme-http-01.txt'),
             "w").write("content-of-123")
        result = TestEnv.get_meta(domain, "/.well-known/acme-challenge/123",
                                  False)
        assert result['rv'] == 0
        assert result['http_status'] == 200
        assert result['http_headers']['Content-Length'] == '14'
Exemple #16
0
 def test_502_301(self):
     # test case: change contact info on existing valid md
     # setup: create md in store
     domain = self.test_domain
     name = "www." + domain
     self._prepare_md([ name ])
     assert TestEnv.apache_start() == 0
     # setup: drive it
     assert TestEnv.a2md( [ "drive", name ] )['rv'] == 0
     old_cert = CertUtil( TestEnv.store_domain_file(name, 'pubcert.pem'))
     # setup: add second domain
     assert TestEnv.a2md([ "update", name, "contacts", "test@" + domain ])['rv'] == 0
     # drive
     assert TestEnv.a2md( [ "drive", name ] )['rv'] == 0
     # compare cert serial
     new_cert = CertUtil( TestEnv.store_domain_file(name, 'pubcert.pem'))
     assert old_cert.get_serial() == new_cert.get_serial()
 def test_500_301(self):
     # test case: change contact info on existing valid md
     # setup: create md in store
     domain = "test500-301-" + TestDrive.dns_uniq
     name = "www." + domain
     self._prepare_md([ name ])
     assert TestEnv.apache_start() == 0
     # setup: drive it
     assert TestEnv.a2md( [ "drive", name ] )['rv'] == 0
     old_cert = CertUtil(TestEnv.path_domain_pubcert(name))
     # setup: add second domain
     assert TestEnv.a2md([ "update", name, "contacts", "test@" + domain ])['rv'] == 0
     # drive
     assert TestEnv.a2md( [ "drive", name ] )['rv'] == 0
     # compare cert serial
     new_cert = CertUtil(TestEnv.path_domain_pubcert(name))
     assert old_cert.get_serial() == new_cert.get_serial()
 def test_500_300(self):
     # test case: remove one domain name from existing valid md
     # setup: create md in store
     domain = "test500-300-" + TestDrive.dns_uniq
     name = "www." + domain
     self._prepare_md([ name, "test." + domain, "xxx." + domain ])
     assert TestEnv.apache_start() == 0
     # setup: drive it
     assert TestEnv.a2md( [ "drive", name ] )['rv'] == 0
     old_cert = CertUtil(TestEnv.path_domain_pubcert(name))
     # setup: remove one domain
     assert TestEnv.a2md([ "update", name, "domains"] + [ name, "test." + domain ])['rv'] == 0
     # drive
     assert TestEnv.a2md( [ "-vv", "drive", name ] )['rv'] == 0
     # compare cert serial
     new_cert = CertUtil(TestEnv.path_domain_pubcert(name))
     assert old_cert.get_serial() == new_cert.get_serial()
Exemple #19
0
 def test_502_103(self):
     # test case: md with one domain, ACME account and TOS agreement on server
     # setup: create md
     domain = self.test_domain
     name = "www." + domain
     assert TestEnv.a2md(["add", name])['rv'] == 0
     assert TestEnv.a2md([ "update", name, "contacts", "admin@" + domain ])['rv'] == 0
     assert TestEnv.apache_start() == 0
     # setup: create account on server
     run = TestEnv.a2md( ["-t", "accepted", "acme", "newreg", "admin@" + domain], raw=True )
     assert run['rv'] == 0
     acct = re.match("registered: (.*)$", run["stdout"]).group(1)
     # setup: link md to account
     assert TestEnv.a2md([ "update", name, "account", acct])['rv'] == 0
     # drive
     assert TestEnv.a2md( [ "-vv", "drive", name ] )['rv'] == 0
     TestEnv.check_md_credentials(name, [ name ])
 def test_500_200(self):
     # test case: add dns name on existing valid md
     # setup: create md in store
     domain = "test500-200-" + TestDrive.dns_uniq
     name = "www." + domain
     self._prepare_md([ name ])
     assert TestEnv.apache_start() == 0
     # setup: drive it
     assert TestEnv.a2md( [ "drive", name ] )['rv'] == 0
     old_cert = CertUtil(TestEnv.path_domain_pubcert(name))
     # setup: add second domain
     assert TestEnv.a2md([ "update", name, "domains", name, "test." + domain ])['rv'] == 0
     # drive
     assert TestEnv.a2md( [ "-vv", "drive", name ] )['rv'] == 0
     # check new cert
     self._check_md_cert([ name, "test." + domain ])
     new_cert = CertUtil(TestEnv.path_domain_pubcert(name))
     assert old_cert.get_serial() != new_cert.get_serial()
Exemple #21
0
 def test_502_200(self):
     # test case: add dns name on existing valid md
     # setup: create md in store
     domain = self.test_domain
     name = "www." + domain
     self._prepare_md([ name ])
     assert TestEnv.apache_start() == 0
     # setup: drive it
     assert TestEnv.a2md( [ "drive", name ] )['rv'] == 0
     old_cert = CertUtil( TestEnv.store_domain_file(name, 'pubcert.pem'))
     # setup: add second domain
     assert TestEnv.a2md([ "update", name, "domains", name, "test." + domain ])['rv'] == 0
     # drive
     assert TestEnv.a2md( [ "-vv", "drive", name ] )['rv'] == 0
     # check new cert
     TestEnv.check_md_credentials(name, [ name, "test." + domain ])
     new_cert = CertUtil( TestEnv.store_domain_file(name, 'pubcert.pem'))
     assert old_cert.get_serial() != new_cert.get_serial()
 def test_500_103(self):
     # test case: md with one domain, ACME account and TOS agreement on server
     # setup: create md
     domain = "test500-103-" + TestDrive.dns_uniq
     name = "www." + domain
     assert TestEnv.a2md(["add", name])['rv'] == 0
     assert TestEnv.a2md([ "update", name, "contacts", "admin@" + domain ])['rv'] == 0
     assert TestEnv.apache_start() == 0
     # setup: create account on server
     run = TestEnv.a2md( ["acme", "newreg", "admin@" + domain], raw=True )
     assert run['rv'] == 0
     acct = re.match("registered: (.*)$", run["stdout"]).group(1)
     # setup: send TOS agreement to server
     assert TestEnv.a2md(["--terms", TestEnv.ACME_TOS, "acme", "agree", acct])['rv'] == 0
     # setup: link md to account
     assert TestEnv.a2md([ "update", name, "account", acct])['rv'] == 0
     # drive
     assert TestEnv.a2md( [ "-vv", "drive", name ] )['rv'] == 0
     self._check_md_cert([ name ])
Exemple #23
0
    def test_500_100(self):
        # test case: md with one domain
        domain = "test500-100-" + TestDrive.dns_uniq
        name = "www." + domain
        self._prepare_md([name])
        assert TestEnv.apache_start() == 0
        # drive
        prevMd = TestEnv.a2md(["list", name])['jout']['output'][0]
        assert TestEnv.a2md(["drive", "-c", "http-01", name])['rv'] == 0
        self._check_md_cert([name])
        self._check_account_key(name)

        # check: challenges removed
        TestEnv.check_dir_empty(TestEnv.path_challenges())
        # check archive content
        assert json.loads(
            open(TestEnv.path_domain(name, archiveVersion=1)).read()) == prevMd

        # check file system permissions:
        TestEnv.check_file_permissions(name)
Exemple #24
0
 def test_502_105(self):
     # test case: md with one domain, local TOS agreement and ACME account that is deleted (!) on server
     # setup: create md
     domain = self.test_domain
     name = "www." + domain
     self._prepare_md([ name ])
     assert TestEnv.apache_start() == 0
     # setup: create account on server
     run = TestEnv.a2md( ["-t", "accepted", "acme", "newreg", "test@" + domain], raw=True )
     assert run['rv'] == 0
     acct = re.match("registered: (.*)$", run["stdout"]).group(1)
     # setup: link md to account
     assert TestEnv.a2md([ "update", name, "account", acct])['rv'] == 0
     # setup: delete account on server
     assert TestEnv.a2md( ["acme", "delreg", acct] )['rv'] == 0
     # drive
     run = TestEnv.a2md( [ "drive", name ] )
     print run["stderr"]
     assert run['rv'] == 0
     TestEnv.check_md_credentials(name, [ name ])
    def test_502_100(self):
        # test case: md with one domain
        domain = "test502-100-" + TestDrive.dns_uniq
        name = "www." + domain
        self._prepare_md([name])
        assert TestEnv.apache_start() == 0
        # drive
        prevMd = TestEnv.a2md(["list", name])['jout']['output'][0]
        assert TestEnv.a2md(["-v", "drive", "-c", "http-01", name])['rv'] == 0
        self._check_md_cert([name])
        self._check_account_key(name)

        # check archive content
        assert json.loads(
            open(TestEnv.path_domain(name, archiveVersion=1)).read()) == prevMd
        # check file system permissions:
        TestEnv.check_file_permissions(name)
        # check: challenges removed
        TestEnv.check_dir_empty(TestEnv.path_challenges())
        # check how the challenge resources are answered in sevceral combinations
        result = TestEnv.get_meta(domain, "/.well-known/acme-challenge", False)
        assert result['rv'] == 0
        assert result['http_status'] == 404
        result = TestEnv.get_meta(domain, "/.well-known/acme-challenge/",
                                  False)
        assert result['rv'] == 0
        assert result['http_status'] == 404
        result = TestEnv.get_meta(domain, "/.well-known/acme-challenge/123",
                                  False)
        assert result['rv'] == 0
        assert result['http_status'] == 404
        assert result['rv'] == 0
        cdir = os.path.join(TestEnv.path_challenges(), domain)
        os.makedirs(cdir)
        open(os.path.join(cdir, 'acme-http-01.txt'),
             "w").write("content-of-123")
        result = TestEnv.get_meta(domain, "/.well-known/acme-challenge/123",
                                  False)
        assert result['rv'] == 0
        assert result['http_status'] == 200
        assert result['http_headers']['Content-Length'] == '14'
 def setup_method(self, method):
     print("setup_method: %s" % method.__name__)
     TestEnv.check_acme()
     TestEnv.clear_store()
     TestEnv.install_test_conf(None)
     assert TestEnv.apache_start() == 0