aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2015-08-06 17:56:37 +0000
committerRob Austein <sra@hactrn.net>2015-08-06 17:56:37 +0000
commit2ae98a7ccab79caa42f3b7d84fee8e9d13cd9b4c (patch)
treeff27fe1acf6850cff9c876fe3417dfc3810e0046
parente29bf765c2d8151b8cd03cf6c5982c6bbad9dcdd (diff)
Script to generate root certificates on machines without useful OpenSSL. See #768.
svn path=/trunk/; revision=6090
-rwxr-xr-xpotpourri/generate-root-certificate62
1 files changed, 62 insertions, 0 deletions
diff --git a/potpourri/generate-root-certificate b/potpourri/generate-root-certificate
new file mode 100755
index 00000000..31647d5f
--- /dev/null
+++ b/potpourri/generate-root-certificate
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+
+"""
+Generate an RPKI root certificate for rootd. In most cases you should
+not need to do this; see caveats in the manual about running rootd if
+you think you need this. This script does nothing that can't also be
+done with the OpenSSL command line tool, but on some platforms the
+installed copy of openssl doesn't understand the RFC 3779 extensions.
+"""
+
+import os
+import sys
+import time
+import argparse
+import rpki.x509
+import rpki.config
+import rpki.sundial
+import rpki.resource_set
+
+os.environ["TZ"] = "UTC"
+time.tzset()
+
+parser = argparse.ArgumentParser(description = __doc__)
+parser.add_argument("-c", "--config", help = "configuration file")
+parser.add_argument("-a", "--asns", default = "0-4294967295", help = "ASN resources")
+parser.add_argument("-4", "--ipv4", default = "0.0.0.0/0", help = "IPv4 resources")
+parser.add_argument("-6", "--ipv6", default = "::/0", help = "IPv6 resources")
+parser.add_argument("--certificate", default = "root.cer", help = "certificate file")
+parser.add_argument("--key", default = "root.key", help = "key file")
+parser.add_argument("--tal", default = "root.tal", help = "TAL file")
+args = parser.parse_args()
+
+cfg = rpki.config.parser(args.config, "rootd")
+
+resources = rpki.resource_set.resource_bag(
+ asn = rpki.resource_set.resource_set_as(args.asns),
+ v4 = rpki.resource_set.resource_set_ipv4(args.ipv4),
+ v6 = rpki.resource_set.resource_set_ipv6(args.ipv6))
+
+keypair = rpki.x509.RSA.generate(quiet = True)
+
+sia = cfg.get("rpki-base-uri")
+sia = (sia, sia + "root.mft", None)
+
+uri = cfg.get("rpki-root-cert-uri")
+
+cert = rpki.x509.X509.self_certify(
+ keypair = keypair,
+ subject_key = keypair.get_public(),
+ serial = 1,
+ sia = sia,
+ notAfter = rpki.sundial.now() + rpki.sundial.timedelta(days = 365),
+ resources = resources)
+
+with open(args.certificate, "wb") as f:
+ f.write(cert.get_DER())
+
+with open(args.key, "wb") as f:
+ f.write(keypair.get_DER())
+
+with open(args.tal, "w") as f:
+ f.write(uri + "\n\n" + keypair.get_public().get_Base64())