Is that because you gather / manage ARI data somewhat separately from the task that manages cert renewal orders?
No. I manage all the cert data in SQL, so it's extremely easy to process/search/recall everything for a given cert. The ARI data is stored on each Cert's record.
My system doubles as an ACME Client and Certificate Manager [to provision certs into dynamic loading of clustered nginx servers]. If my system requested a given Certificate, I know the full ARI history - but if a Certificate were procured elsewhere and uploaded into it, I have no idea – so I could be continually polling for ARI data of a Certificate that can't be "replaced". Also - while Certbot considers there to only be a single "live" Certificate for a given "lineage", I am (trying to) support multiple duplicate Certificates at a given time.
We have a whitelabel product that Subscribers CNAME onto; the primary usage of the system has been to order and manage those (Second Party) Certificates, and dynamically load them into Nginx. For our own (First Party) certificates, those are managed by a non-internet computer using DNS-01 auth and deployed to the public servers. One product is already split across 2 data centers, and I'd like to be using a dedicated cert per data-center (as part of the security compromise plan).
That being said, the reason for this question has to do more with the human UX and not Automatic Renewals.
I moved the primary object of my system into a RenewalConfiguration, because that will easily tie together a primary and backup certificate into a single security policy: Use Account A on CA 1 to order N domains with X Private Key Technology. To support a backup CA, I just need to add a second account selection and a few DB fields to the renewal.
Because I didn't remember that passage in the RFC, not remembering to defend against the pebble/boulder divergence above (we all make mistakes, some days many more than others!), I basically ran into this problem:
- Automatic Systems will want to renew based on a Cert's ARI
- A HUMAN will want to renew from the perspective of a Cert, an Order or a Renewal Configuration. Based on whatever they select, I jump to the Renewal Configuration and suggest the
replaces
field:
- I now have 2 live duplicate certs, one is "renewable" and the other is not.
- I might also have a secondary order, so there is another candidate.
The solution I ended up on, is basically this:
# when the cert is issued
cert1.replaced_by = cert2.ari_identifier
cert2.replaces = cert1.ari_identifier
Then, when displaying candidates, I exclude certificates that have already been replaced.
This needs to be done at issue, because multiple orders can be started with a "replaces".
The system is a bit bloated and complex because it's been doing too many things; I was previously "backporting" it to a public version, but decided to just redesign the public version as scaled down and do most of the other stuff on our systems. AKA, digging out from technical debt.
Because it is mostly handled through a programmatic API, I try to break it as much as possible through edge cases and race conditions.
Currently I have two installations of the system:
- installation A works as a client & certificate manager
- installation B is for research and analysis of public certificates
One of the products we have is a web index / spider for online content. It monitors publishers and social media for citations, and is used to track sharing performance, determine trends, nd generate content-writing recommendations.
It analyzes all the metadata associated with an article to identify and disambiguate the authors, publishers, and likely underlying entities. Multiple different websites can often be associated onto a single content farm based on shared metadata information - like reporting into the same anayltics ids, sharing the same facebook admins, or even having the exact same setup of 3rd party apps. When they aren't hiding behind cloudflare or akamai, Certs and IPs are often useful for associating websites together; the russian fake-news content farms often had multi-san certs or shared a key.
So, that second installation is loaded with all the certs found through spidering.