aboutsummaryrefslogtreecommitdiff
path: root/scripts/convert-from-entitydb-to-sql.py
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2011-12-25 18:36:49 +0000
committerRob Austein <sra@hactrn.net>2011-12-25 18:36:49 +0000
commit523a1f269dc1c19e3537fc0d1dc9b96a1e7fb8dc (patch)
tree69159fc376fc35ad525600d184c3598d3532f6f6 /scripts/convert-from-entitydb-to-sql.py
parent75c16c86b64dc47bc8559946d4e133586b9a2919 (diff)
Clean up rootd cross-certification nastiness (another TLS relic).
svn path=/branches/tk100/; revision=4134
Diffstat (limited to 'scripts/convert-from-entitydb-to-sql.py')
-rw-r--r--scripts/convert-from-entitydb-to-sql.py59
1 files changed, 39 insertions, 20 deletions
diff --git a/scripts/convert-from-entitydb-to-sql.py b/scripts/convert-from-entitydb-to-sql.py
index 64f0d31a..3ba5241a 100644
--- a/scripts/convert-from-entitydb-to-sql.py
+++ b/scripts/convert-from-entitydb-to-sql.py
@@ -109,16 +109,16 @@ def read_openssl_serial(filename):
f.close()
return int(text.strip(), 16)
-def get_or_create_ServerCertificate(issuer, purpose):
+def get_or_create_ServerEE(issuer, purpose):
cer = rpki.x509.X509(Auto_file = os.path.join(bpki, "servers", purpose + ".cer"))
key = rpki.x509.RSA(Auto_file = os.path.join(bpki, "servers", purpose + ".key"))
- rpki.irdb.ServerCertificate.objects.get_or_create(
+ rpki.irdb.ServerEE.objects.get_or_create(
issuer = issuer,
purpose = purpose,
certificate = cer,
private_key = key)
-# Load BPKI CA data
+# Load BPKI CAs and directly certified EEs
cer = rpki.x509.X509(Auto_file = os.path.join(bpki, "resources", "ca.cer"))
key = rpki.x509.RSA(Auto_file = os.path.join(bpki, "resources", "ca.key"))
@@ -139,23 +139,21 @@ resource_ca = rpki.irdb.ResourceHolderCA.objects.get_or_create(
if os.path.exists(os.path.join(bpki, "resources", "referral.cer")):
cer = rpki.x509.X509(Auto_file = os.path.join(bpki, "resources", "referral.cer"))
key = rpki.x509.RSA(Auto_file = os.path.join(bpki, "resources", "referral.key"))
- rpki.irdb.ReferralCertificate.objects.get_or_create(
+ rpki.irdb.Referral.objects.get_or_create(
issuer = resource_ca,
certificate = cer,
private_key = key)
-# Load BPKI server EE certificates and keys
+run_rpkid = cfg.getboolean("run_rpkid", section = "myrpki")
+run_pubd = cfg.getboolean("run_pubd", section = "myrpki")
+run_rootd = cfg.getboolean("run_rootd", section = "myrpki")
-run_flags = dict((i, cfg.getboolean(i, section = "myrpki"))
- for i in ("run_rpkid", "run_pubd", "run_rootd"))
-
-if any(run_flags.itervalues()):
+if run_rpkid or run_pubd:
cer = rpki.x509.X509(Auto_file = os.path.join(bpki, "servers", "ca.cer"))
key = rpki.x509.RSA(Auto_file = os.path.join(bpki, "servers", "ca.key"))
crl = rpki.x509.CRL(Auto_file = os.path.join(bpki, "servers", "ca.crl"))
serial = read_openssl_serial(os.path.join(bpki, "servers", "serial"))
crl_number = read_openssl_serial(os.path.join(bpki, "servers", "crl_number"))
-
server_ca = rpki.irdb.ServerCA.objects.get_or_create(
certificate = cer,
private_key = key,
@@ -164,18 +162,29 @@ if any(run_flags.itervalues()):
next_crl_number = crl_number,
last_crl_update = crl.getThisUpdate().to_sql(),
next_crl_update = crl.getNextUpdate().to_sql())[0]
+ get_or_create_ServerEE(server_ca, "irbe")
- get_or_create_ServerCertificate(server_ca, "irbe")
- if run_flags["run_rpkid"]:
- get_or_create_ServerCertificate(server_ca, "rpkid")
- get_or_create_ServerCertificate(server_ca, "irdbd")
- if run_flags["run_pubd"]:
- get_or_create_ServerCertificate(server_ca, "pubd")
- if run_flags["run_rootd"]:
- get_or_create_ServerCertificate(server_ca, "rootd")
else:
server_ca = None
+if run_rpkid:
+ get_or_create_ServerEE(server_ca, "rpkid")
+ get_or_create_ServerEE(server_ca, "irdbd")
+
+if run_pubd:
+ get_or_create_ServerEE(server_ca, "pubd")
+
+# Certification model for rootd has changed. We can reuse the old
+# key, but we have to recertify under a different CA than previously.
+# Yes, we're pulling a key from the servers BPKI tree and certifying
+# it under the resource holder CA, that's part of the change.
+
+if run_rootd:
+ rpki.irdb.Rootd.objects.get_or_certify(
+ issuer = resource_ca,
+ service_uri = "http://localhost:%s/" % cfg.get("rootd_server_port", section = "myrpki"),
+ private_key = rpki.x509.RSA(Auto_file = os.path.join(bpki, "servers", "rootd.key")))
+
# Load BSC certificates and requests. Yes, this currently wires in
# exactly one BSC handle, "bsc". So does the old myrpki code. Ick.
@@ -277,6 +286,11 @@ for filename in glob.iglob(os.path.join(entitydb, "parents", "*.xml")):
rpki.relaxng.myrpki.assertValid(e)
assert e.tag == tag_parent
+ if parent_handle == self_handle:
+ assert run_rootd
+ assert e.get("service_uri") == "http://localhost:%s/" % cfg.get("rootd_server_port", section = "myrpki")
+ continue
+
ta = rpki.x509.X509(Base64 = e.findtext(tag_bpki_resource_ta))
xcfn = os.path.join(bpki, "resources", "xcert.%s.cer" % xcert_hash(ta))
xcert_filenames.discard(xcfn)
@@ -298,6 +312,7 @@ for filename in glob.iglob(os.path.join(entitydb, "parents", "*.xml")):
child_handle = e.get("child_handle"),
ta = ta,
certificate = xcert,
+ service_uri = e.get("service_uri"),
repository_type = repository_type,
referrer = referrer,
referral_authorization = referral_authorization,
@@ -334,7 +349,11 @@ for filename in glob.iglob(os.path.join(entitydb, "repositories", "*.xml")):
xcert_filenames.discard(xcfn)
xcert = rpki.x509.X509(Auto_file = xcfn)
- parent = rpki.irdb.Parent.objects.get(handle = e.get("parent_handle"))
+ parent_handle = e.get("parent_handle")
+ if parent_handle == self_handle:
+ turtle = resource_ca.rootd
+ else:
+ turtle = rpki.irdb.Parent.objects.get(handle = parent_handle)
rpki.irdb.Repository.objects.get_or_create(
handle = repository_handle,
@@ -343,7 +362,7 @@ for filename in glob.iglob(os.path.join(entitydb, "repositories", "*.xml")):
certificate = xcert,
service_uri = e.get("service_uri"),
sia_base = e.get("sia_base"),
- parent = parent,
+ turtle = turtle,
issuer = resource_ca)
# Scrape client data out of the entitydb.