aboutsummaryrefslogtreecommitdiff
path: root/rpkid/testbed.py
diff options
context:
space:
mode:
Diffstat (limited to 'rpkid/testbed.py')
-rw-r--r--rpkid/testbed.py57
1 files changed, 31 insertions, 26 deletions
diff --git a/rpkid/testbed.py b/rpkid/testbed.py
index 3cd2a4b1..dda8a6c4 100644
--- a/rpkid/testbed.py
+++ b/rpkid/testbed.py
@@ -118,6 +118,7 @@ def main():
rpki.log.init(testbed_name)
rpki.log.info("Starting")
+ rpki.log.set_trace(True)
signal.signal(signal.SIGALRM, wakeup)
@@ -141,8 +142,6 @@ def main():
rpki.log.info("Constructing biz keys and certs for rootd")
setup_biz_cert_chain(rootd_name, ee = ("RPKI",))
- global rootd_ta
- rootd_ta = rpki.x509.X509(PEM_file = rootd_name + "-TA.cer")
for a in db:
a.setup_biz_certs()
@@ -592,18 +591,18 @@ class allocation(object):
that one is the magic self-signed micro engine.
"""
- rpki.log.info("Creating rpkid self object for %s" % self.name)
self_ca = rpki.x509.X509(Auto_file = self.name + "-SELF-1.cer")
+ rpki.log.info("Creating rpkid self object for %s" % self.name)
self.self_id = self.call_rpkid(rpki.left_right.self_elt.make_pdu(
- action = "create", crl_interval = self.crl_interval, regen_margin = self.regen_margin, biz_cert = self_ca)).self_id
+ action = "create", crl_interval = self.crl_interval, regen_margin = self.regen_margin, bpki_cert = self_ca)).self_id
rpki.log.info("Creating rpkid BSC object for %s" % self.name)
pdu = self.call_rpkid(rpki.left_right.bsc_elt.make_pdu(action = "create", self_id = self.self_id, generate_keypair = True))
self.bsc_id = pdu.bsc_id
rpki.log.info("Issuing BSC EE cert for %s" % self.name)
- cmd = (prog_openssl, "x509", "-req", "-extfile", self.name + "-RPKI.cnf", "-extensions", "req_x509_ext", "-days", "30",
- "-CA", self.name + "-SELF-1.cer", "-CAkey", self.name + "-SELF-1.key", "-CAcreateserial")
+ cmd = (prog_openssl, "x509", "-req", "-sha256", "-extfile", self.name + "-RPKI.conf", "-extensions", "req_x509_ext", "-days", "30",
+ "-CA", self.name + "-SELF-1.cer", "-CAkey", self.name + "-SELF-1.key", "-CAcreateserial", "-text")
signer = subprocess.Popen(cmd, stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
signed = signer.communicate(input = pdu.pkcs10_request.get_PEM())
if not signed[0]:
@@ -614,29 +613,33 @@ class allocation(object):
rpki.log.info("Installing BSC EE cert for %s" % self.name)
self.call_rpkid(rpki.left_right.bsc_elt.make_pdu(action = "set", self_id = self.self_id, bsc_id = self.bsc_id, signing_cert = (bsc_ee,)))
+ # Once we have a real repository protocol we'll have to do cross-certification here
rpki.log.info("Creating rpkid repository object for %s" % self.name)
self.repository_id = self.call_rpkid(rpki.left_right.repository_elt.make_pdu(action = "create", self_id = self.self_id, bsc_id = self.bsc_id)).repository_id
rpki.log.info("Creating rpkid parent object for %s" % self.name)
if self.is_root():
+ rootd_cert = cross_certify(self.name + "-SELF-1", rootd_name + "-TA")
self.parent_id = self.call_rpkid(rpki.left_right.parent_elt.make_pdu(
action = "create", self_id = self.self_id, bsc_id = self.bsc_id, repository_id = self.repository_id, sia_base = self.sia_base,
- peer_biz_cert = rootd_ta, sender_name = self.name, recipient_name = "Walrus",
+ bpki_cms_cert = rootd_cert, bpki_https_cert = rootd_cert, sender_name = self.name, recipient_name = "Walrus",
peer_contact_uri = "https://localhost:%s/" % rootd_port)).parent_id
else:
+ parent_cms_cert = cross_certify(self.name + "-SELF-1", self.parent.name + "-SELF-1")
+ parent_https_cert = cross_certify(self.name + "-SELF-1", self.parent.name + "-TA")
self.parent_id = self.call_rpkid(rpki.left_right.parent_elt.make_pdu(
action = "create", self_id = self.self_id, bsc_id = self.bsc_id, repository_id = self.repository_id, sia_base = self.sia_base,
- peer_biz_cert = self.parent.rpkid_ta, sender_name = self.name, recipient_name = self.parent.name,
+ bpki_cms_cert = parent_cms_cert, bpki_https_cert = parent_https_cert, sender_name = self.name, recipient_name = self.parent.name,
peer_contact_uri = "https://localhost:%s/up-down/%s" % (self.parent.rpki_port, self.child_id))).parent_id
rpki.log.info("Creating rpkid child objects for %s" % self.name)
db = MySQLdb.connect(user = "irdb", db = self.irdb_db_name, passwd = irdb_db_pass)
cur = db.cursor()
for kid in self.kids:
- peer_biz_cert = cross_certify(self.name + "-SELF-1", kid.name + "-SELF-1")
+ bpki_cert = cross_certify(self.name + "-SELF-1", kid.name + "-SELF-1")
rpki.log.info("Creating rpkid child object for %s as child of %s" % (kid.name, self.name))
kid.child_id = self.call_rpkid(rpki.left_right.child_elt.make_pdu(
- action = "create", self_id = self.self_id, bsc_id = self.bsc_id, peer_biz_cert = peer_biz_cert)).child_id
+ action = "create", self_id = self.self_id, bsc_id = self.bsc_id, bpki_cert = bpki_cert)).child_id
cur.execute("UPDATE registrant SET rpki_self_id = %s, rpki_child_id = %s WHERE IRBE_mapped_id = %s", (self.self_id, kid.child_id, kid.name))
db.close()
@@ -690,7 +693,7 @@ def setup_biz_cert_chain(name, ee = (), ca = ()):
"kind" : kind,
"ca" : "false" if kind in ee else "true",
"openssl" : prog_openssl }
- f = open("%(name)s-%(kind)s.cnf" % d, "w")
+ f = open("%(name)s-%(kind)s.conf" % d, "w")
f.write(biz_cert_fmt_1 % d)
f.close()
if not os.path.exists("%(name)s-%(kind)s.key" % d):
@@ -705,22 +708,23 @@ def setup_biz_cert_chain(name, ee = (), ca = ()):
def cross_certify(certifier, certificant):
"""Cross-certify and return the resulting certificate."""
- rpki.log.info("Cross certifying %s into %s's BPKI" % (certificant, certifier))
certfile = certifier + "-" + certificant + ".cer"
- signer = subprocess.Popen((prog_openssl, "x509", "-req",
+ rpki.log.trace()
+ rpki.log.info("Cross certifying %s into %s's BPKI (%s)" % (certificant, certifier, certfile))
+ signer = subprocess.Popen((prog_openssl, "x509", "-req", "-sha256", "-text",
+ "-extensions", "req_x509_ext", "-CAcreateserial",
"-in", certificant + ".req",
"-out", certfile,
- "-extfile", certifier + ".cnf",
- "-extensions", "req_x509_ext",
+ "-extfile", certifier + ".conf",
"-CA", certifier + ".cer",
- "-CAkey", certifier + ".key",
- "-CAcreateserial"),
+ "-CAkey", certifier + ".key"),
stdout = subprocess.PIPE,
stderr = subprocess.PIPE)
errors = signer.communicate()[1]
if signer.returncode != 0:
- rpki.log.error("Cross certification error: " + errors)
- raise RuntimeError, "Couldn't cross-certify %s into %s's BPKI" % (certificant, certifier)
+ msg = "Couldn't cross-certify %s into %s's BPKI: %s" % (certificant, certifier, errors)
+ rpki.log.error(msg)
+ raise RuntimeError, msg
return rpki.x509.X509(Auto_file = certfile)
def setup_rootd(rpkid_name, rpkid_tag):
@@ -811,15 +815,15 @@ biz_cert_fmt_2 = '''\
'''
biz_cert_fmt_3 = '''\
-%(openssl)s req -new -key %(name)s-%(kind)s.key -out %(name)s-%(kind)s.req -config %(name)s-%(kind)s.cnf &&
+%(openssl)s req -new -sha256 -key %(name)s-%(kind)s.key -out %(name)s-%(kind)s.req -config %(name)s-%(kind)s.conf &&
'''
biz_cert_fmt_4 = '''\
-%(openssl)s x509 -req -in %(name)s-TA.req -out %(name)s-TA.cer -extfile %(name)s-TA.cnf -extensions req_x509_ext -signkey %(name)s-TA.key -days 60 \
+%(openssl)s x509 -req -sha256 -in %(name)s-TA.req -out %(name)s-TA.cer -extfile %(name)s-TA.conf -extensions req_x509_ext -signkey %(name)s-TA.key -days 60 -text \
'''
biz_cert_fmt_5 = ''' && \
-%(openssl)s x509 -req -in %(name)s-%(kind)s.req -out %(name)s-%(kind)s.cer -extfile %(name)s-%(kind)s.cnf -extensions req_x509_ext -days 30 \
+%(openssl)s x509 -req -sha256 -in %(name)s-%(kind)s.req -out %(name)s-%(kind)s.cer -extfile %(name)s-%(kind)s.conf -extensions req_x509_ext -days 30 -text \
-CA %(name)s-TA.cer -CAkey %(name)s-TA.key -CAcreateserial \
'''
@@ -941,10 +945,11 @@ rootd_fmt_2 = '''\
'''
rootd_fmt_3 = '''\
-%(openssl)s req -new -key %(rootd_name)s.key -out %(rootd_name)s.req -config %(rootd_name)s.conf -text &&
-%(openssl)s x509 -req -in %(rootd_name)s.req -out %(rootd_name)s.cer -outform DER -extfile %(rootd_name)s.conf -extensions req_x509_ext -signkey %(rootd_name)s.key &&
-%(openssl)s x509 -req -in %(rpkid_name)s-%(rpkid_tag)s.req -out %(rootd_name)s-%(rpkid_name)s.cer -extfile %(rootd_name)s.conf -extensions req_x509_ext \
- -CA %(rootd_name)s-TA.cer -CAkey %(rootd_name)s-TA.key -CAcreateserial
+%(openssl)s req -new -sha256 -key %(rootd_name)s.key -out %(rootd_name)s.req -config %(rootd_name)s.conf -text &&
+%(openssl)s x509 -req -sha256 -in %(rootd_name)s.req -out %(rootd_name)s.cer -outform DER -extfile %(rootd_name)s.conf -extensions req_x509_ext \
+ -signkey %(rootd_name)s.key &&
+%(openssl)s x509 -req -sha256 -in %(rpkid_name)s-%(rpkid_tag)s.req -out %(rootd_name)s-%(rpkid_name)s.cer -extfile %(rootd_name)s.conf -extensions req_x509_ext -text \
+ -CA %(rootd_name)s-TA.cer -CAkey %(rootd_name)s-TA.key -CAcreateserial
'''
rcynic_fmt_1 = '''\