$Id$ -*- Text -*- Python RPKI production tools. Requires Python 2.5. External Python packages required: - lxml, which in turn requires the libxml2 C libraries. FreeBSD: /usr/ports/devel/py-lxml - MySQLdb, which in turn requires MySQL client and server. I'm testing with MySQL 5.1. FreeBSD: /usr/ports/databases/py-MySQLdb - TLSLite, which pulls in other crypto packages. FreeBSD: /usr/ports/security/py-tlslite - Cryptlib, at the moment just to support TLSlite but may end up using it for other things later. FreeBSD: /usr/ports/security/cryptlib ...but the FreeBSD port doesn't (yet?) install the Python bindings, sigh, so at the moment you have to do that by hand: # cd /usr/ports/security/cryptlib # make install # cd work/bindings # python setup.py install # cd ../.. # make clean - Eventually I expect that this will require an event-handling package like Twisted, but I'm not there yet. - The testpoke tool (up-down protocol command line test client) also uses PyYAML, mostly for compatability with APNIC's equivalent tool. FreeBSD: /usr/ports/devel/py-yaml We also use a hacked copy of the Python OpenSSL Wrappers (POW) package, but our copy has enough modifications that it's expanded in the Subversion tree. Depending on how this all works out, I may end up splitting the POW.pkix module out of the POW package and using it with Cryptlib, as the POW.pkix package is 98% about doing ASN.1 in pure Python and only 2% about any kind of crypto. Current TO DO list: - resource_set_notafter attribute added to RelaxNG but not yet to rpki.up_down.class_elt. Need to convert to and from Python datetime but maybe lxml already has code to help us with that. - Things implemented but not yet tested: - Client side of expiration now assumes that parent will reissue when its IRDB changes. - Parent side of revocation (child_cert objects) and CRL generation implemented. - Parent side of expiration implemented. - Child batch processing loop: regeneration or removal of expired certs based on what's in the IRDB. - Batch regeneration of CRLs and manifests for all CAs. - Protection against up-down operations specifying a class_name that belongs to some other self context. - Implement remaining left-right control booleans -- among other reasons, these are the IRBE triggers for things like key rollover, which we need to test some of the stuff that's already done. - Child side of revocation...Common Management Tasks page in the APNIC Wiki shows some states where revocation is triggered by the child after a delay. Other text in Common Management Tasks suggests that ca_detail also needs deferred transitions from pending to active, although Randy and I don't entirely believe that this is necessary or even advisable. Revocation delay is enough to require a deferred state transition timestamp to ca_detail object. Model for this is an enumerated state value (which we already had) and a timestamp (which may be NULL) for next scheduled transition. At the moment we think that the state progression is linear, ie, there's no need for a next_state field. state := pending | active | deprecated timestamp := NULL |