# $Id: myrpki.conf 2722 2009-08-31 22:24:48Z sra $
#
# Config file for myrpki.py, myirbe.py, and RPKI daemons when used
# with myrpki.py etc. Notes:
#
# - There's some duplication of settings between some of the sections,
# because each of the several daemons and control programs was
# written as a free-standing program. Lumping all of the config for
# all of them into a single config file is just a convenience for
# simple configurations; in complex cases you might not have any two
# of them running on the same machine.
#
# - This config file is also read by the OpenSSL command line tool
# running under mypki.py, so syntax must remain compatable with both
# OpenSSL and Python config file parsers, and there's a big chunk of
# OpenSSL voodoo towards the end of this file.
################################################################
[myrpki]
# Handle naming hosted resource-holding entity () represented
# by this myrpki instance. Syntax is an identifier (ASCII letters,
# digits, hyphen, underscore -- no whitespace, non-ASCII characters,
# or other punctuation). You need to set this.
handle = Me
# BPKI trust anchor for the repository in which this will be
# publishing its outputs. You need to set this.
repository_bpki_certificate = repository-ta.cer
# Name by which repository will know this . This may be a
# structured handle, eg, "Grandma/Mom/Me" or might be a simple handle,
# depending on how the repository is set up. Syntax is same as
# "handle", with the addition of "/" characters as an allowed
# delimiter. You need to set this.
repository_handle = Me
# Names of various input and output files. Don't change these without
# a good reason.
roa_csv = roas.csv
children_csv = children.csv
parents_csv = parents.csv
prefix_csv = prefixes.csv
asn_csv = asns.csv
xml_filename = myrpki.xml
bpki_directory = bpki.myrpki
#################################################################
[myirbe]
# Base of service URL for pubd. myirbe.py uses this value to
# configure objects in rpkid. If you are running your
# own copy of pubd (see "want_pubd"), myirbe.py also uses this to
# contact your copy of pubd in order to configure it.
#
# You need to configure this.
pubd_base = https://pubd.example.org:4402/
# Base of service URL for rpkid. myirbe.py uses this to contact your
# rpkid so it can configure it.
#
# You need to configure this.
rpkid_base = https://rpkid.example.org:4404
# Whether you want myirbe.py to attempt to configure your own copy of
# pubd. In general, it's best to use your parent's pubd if you can,
# to reduce the overall number of publication sites that relying
# parties need to check, so don't enable this unless you have a good
# reason. See the [pubd] section if you do enable this.
#
# Enabling this when you are -not- running your own copy of pubd will
# cause myirbe.py to fail when it attempts to perform runtime
# configuration of your nonexistant pubd.
want_pubd = false
# Whether you want myirbe.py to generate BPKI certs for running your
# very own copy of rootd. Don't enable this unless you really know
# what you're doing. See [rootd] section below for further comments.
want_rootd = false
# Where to put BPKI stuff for the IRBE operator (entity that operates
# rpkid etc). Don't change this without a reason.
bpki_directory = bpki.myirbe
#################################################################
[rpkid]
# MySQL database name, user name, and password for rpkid to use to
# store its data. You need to configure these.
sql-database = rpki
sql-username = rpki
sql-password = fnord
# Host and port on which rpkid should listen for HTTPS service
# requests. These should match rpkid_base in the [myirbe] section.
# You need to configure these.
server-host = rpkid.example.org
server-port = 4404
# HTTPS service URL rpkid should use to contact irdbd. If irdbd is
# running on the same machine as rpkid, this can and probably should
# be a loopback URL, since nobody but rpkid needs to talk to irdbd.
irdb-url = https://localhost:4403/
# Where rpkid should look for BPKI certs and keys used in the
# left-right protocol. The following values match where myirbe.py
# will have placed things. Don't change these without a reason.
bpki-ta = bpki.myirbe/ca.cer
rpkid-key = bpki.myirbe/rpkid.key
rpkid-cert = bpki.myirbe/rpkid.cer
irdb-cert = bpki.myirbe/irdbd.cer
irbe-cert = bpki.myirbe/irbe.cer
#################################################################
[irdbd]
# MySQL database name, user name, and password for irdbd to use to
# store its data. You need to configure these.
sql-database = irdb
sql-username = irdb
sql-password = fnord
# HTTP service URL irdbd should listen on. This should match the
# irdb-url parameter in the [rpkid] section; see comments there.
https-url = https://localhost:4403/
# Where irdbd should look for BPKI certs and keys used in the
# left-right protocol. The following values match where myirbe.py
# will have placed things. Don't change these without a reason.
bpki-ta = bpki.myirbe/ca.cer
rpkid-cert = bpki.myirbe/rpkid.cer
irdbd-cert = bpki.myirbe/irdbd.cer
irdbd-key = bpki.myirbe/irdbd.key
#################################################################
[pubd]
# MySQL database name, user name, and password for pubd to use to
# store (some of) its data. You need to configure these.
sql-database = pubd
sql-username = pubd
sql-password = fnord
# Root of directory tree where pubd should write out published data.
# You need to configure this, and the configuration should match up
# with the directory where you point rsyncd. Neither pubd nor rsyncd
# much cares -where- you tell them to put this stuff, the important
# thing is that the rsync:// URIs in generated certificates match up
# with the published objects so that relying parties can find and
# verify rpkid's published outputs.
publication-base = publication/
# Host and port on which pubd should listen for HTTPS service
# requests. These should match pubd_base in the [myirbe] section.
# You need to configure these.
server-host = pubd.example.org
server-port = 4402
# Where pubd should look for BPKI certs and keys used in the
# left-right protocol. The following values match where myirbe.py
# will have placed things. Don't change these without a reason.
bpki-ta = bpki.myirbe/ca.cer
pubd-cert = bpki.myirbe/pubd.cer
pubd-key = bpki.myirbe/pubd.key
irbe-cert = bpki.myirbe/irbe.cer
#################################################################
[irbe_cli]
# HTTPS service URL for rpkid
rpkid-url = https://rpkid.example.org:4404/left-right/
# BPKI certificates and keys for talking to rpkid
rpkid-bpki-ta = bpki.myirbe/ca.cer
rpkid-irbe-key = bpki.myirbe/irbe.key
rpkid-irbe-cert = bpki.myirbe/irbe.cer
rpkid-cert = bpki.myirbe/rpkid.cer
# HTTPS service URL for pubd
pubd-url = https://localhost:4402/control/
# BPKI certificates and keys for talking to pubd
pubd-bpki-ta = bpki.myirbe/ca.cer
pubd-irbe-key = bpki.myirbe/irbe.key
pubd-irbe-cert = bpki.myirbe/irbe.cer
pubd-cert = bpki.myirbe/pubd.cer
#################################################################
# You don't need to run rootd unless you're IANA, are certifying
# private address space, or are an RIR which refuses to accept IANA as
# the root of the public address hierarchy.
#
# Ok, if that wasn't enough to scare you off: rootd is a kludge, and
# needs to be rewritten, or, better, merged into rpkid. It does a
# number of things wrong, and requires far too many configuration
# parameters. You have been warned....
[rootd]
# BPKI certificates and keys for rootd
bpki-ta = bpki.myirbe/ca.cer
rootd-bpki-crl = bpki.myirbe/ca.crl
rootd-bpki-cert = bpki.myirbe/rootd.cer
rootd-bpki-key = bpki.myirbe/rootd.key
child-bpki-cert = bpki.myirbe/child.cer
# Server port on which rootd should listen.
server-port = 4401
# Where rootd should write its output. Yes, rootd should be using
# pubd instead of publishing directly, but it doesn't.
rpki-root-dir = publication/
# rsync URI for directory containing rootd's outputs
rpki-base-uri = rsync://rpki.example.org/Me/
# rsync URI for rootd's root (self-signed) RPKI certificate
rpki-root-cert-uri = rsync://rpki.example.org/Me/root.cer
# Private key corresponding to rootd's root RPKI certificate
rpki-root-key = bpki.myirbe/ca.key
# Filename (as opposed to rsync URI) of rootd's root RPKI certificate
rpki-root-cert = publication/root.cer
# Where rootd should stash a copy of the PKCS #10 request it gets from
# its one (and only) child
rpki-subject-pkcs10 = rootd.subject.pkcs10
# Lifetime of the one and only certificate rootd issues
rpki-subject-lifetime = 30d
# Filename (relative to rootd-base-uri and rpki-root-dir) of the CRL
# for rootd's root RPKI certificate
rpki-root-crl = root.crl
# Filename (relative to rootd-base-uri and rpki-root-dir) of the
# manifest for rootd's root RPKI certificate
rpki-root-manifest = root.mnf
# Up-down protocol class name for RPKI certificate rootd issues to its
# one (and only) child
rpki-class-name = Me
# Filename (relative to rootd-base-uri and rpki-root-dir) of the one
# (and only) RPKI certificate rootd issues
rpki-subject-cert = Me.cer
# The last four paramters in this section are really parameters for
# myirbe.py to use when constructing rootd's root RPKI certificate,
# via an indirection hack in the OpenSSL voodoo portion of this file.
# Don't ask why some of these are duplicated from other paramters in
# this section, you don't want to know (really, you don't).
# ASNs to include in rootd's root RPKI certificate, in openssl.conf format
root_cert_asns = AS:0-4294967295
# IP addresses to include in rootd's root RPKI certificate, in
# openssl.conf format
root_cert_addrs = IPv4:0.0.0.0/0,IPv6:0::/0
# Whatever you put in rpki-base-uri, earlier in this section
root_cert_sia = rsync://rpki.example.org/Me/
# root_cert_sia + rpki-root-manifest
root_cert_manifest = rsync://rpki.example.org/Me/root.mnf
#################################################################
# Constants for OpenSSL voodoo portion of this file, to make them
# easier to find.
[constants]
# Digest algorithm. Don't change this.
digest = sha256
# RSA key length. Don't change this.
key_length = 2048
# Lifetime of BPKI certificates (and rootd RPKI root certificate).
# Don't change this unless you know what you're doing.
cert_days = 365
# Lifetime of BPKI CRLs. Don't change this unless you know what
# you're doing.
crl_days = 365
#################################################################
# The rest of this file is OpenSSL configuration voodoo. Don't touch
# anything below here even if you -do- know what you're doing. Even
# by OpenSSL standards, some of this is weird, and interacts in
# non-obvious ways with code in myrpki.py and myirbe.py. If you touch
# this stuff and something breaks, don't say you weren't warned.
[req]
default_bits = ${constants::key_length}
default_md = ${constants::digest}
distinguished_name = req_dn
prompt = no
encrypt_key = no
[req_dn]
CN = Dummy name for certificate request
[ca_x509_ext_ee]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always
[ca_x509_ext_xcert0]
basicConstraints = critical,CA:true,pathlen:0
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always
[ca_x509_ext_xcert1]
basicConstraints = critical,CA:true,pathlen:1
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always
[ca_x509_ext_ca]
basicConstraints = critical,CA:true
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always
[ca]
default_ca = ca
dir = ${ENV::BPKI_DIRECTORY}
new_certs_dir = $dir
database = $dir/index
certificate = $dir/ca.cer
private_key = $dir/ca.key
default_days = ${constants::cert_days}
default_crl_days = ${constants::crl_days}
default_md = ${constants::digest}
policy = ca_dn_policy
unique_subject = no
serial = $dir/serial
crlnumber = $dir/crl_number
[ca_dn_policy]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
givenName = optional
surname = optional
[rootd_x509_extensions]
basicConstraints = critical,CA:true
subjectKeyIdentifier = hash
keyUsage = critical,keyCertSign,cRLSign
subjectInfoAccess = 1.3.6.1.5.5.7.48.5;URI:${rootd::root_cert_sia},1.3.6.1.5.5.7.48.10;URI:${rootd::root_cert_manifest}
sbgp-autonomousSysNum = critical,${rootd::root_cert_asns}
sbgp-ipAddrBlock = critical,${rootd::root_cert_addrs}
certificatePolicies = critical,1.3.6.1.5.5.7.14.2