Wikimedia "Unified" Certificates
These are the primary multi-wildcard-SAN certificates used on the front edge of our Traffic clusters. They're likely to be the last ones we migrate to LetsEncrypt (if ever!). They have a number of unique properties operationally:
- Highly important - these certificates terminate the bulk of all of our important live user-facing traffic.
- High SAN counts + Wildcards - We have all 13x canonical domains in these certs as SANs, wildcarded at the domain level and the m-dot level, as well as a few other odds and ends. All total the current SAN count is 29, and most of those are wildcards.
- Broad deployment - These certs deploy to all Traffic edge nodes in all datacenters, so deployment/synchronization issues are a little trickier than smaller services with one to a handful of hosts.
- Redundancy - Because we use OCSP Stapling which relies on the upstream certificate providers' OCSP infrastructure reliability in near-realtime, we purchase and deploy redundant copies of these certificates from two different vendors.
Certificate Vendor Deployment and Switching on Failure
We have had upstream OCSP failures affect us in the past: Incident_documentation/20150820-OCSP Incident_documentation/20161013-GlobalSign. Our plan for future OCSP incidents is to switch all datacenters to whichever vendor's certificates are not having OCSP issues.
Our current vendors are GlobalSign and Digicert. Our standard deployment of these today is to use the Digicert certificates in our non-US datacenters and GlobalSign in the US datacenters, so that both are known-good by servicing live user traffic. All of the certificate vendors are deployed to all hosts at all datacenters, and OCSP staple-fetching occurs for them all from all hosts at all times as well. Switching vendors is just a matter of proxy reconfiguration.
The vendor used in each DC is set via hieradata:
bblack@alaxel:~/repos/puppet$ git grep public_tls_unified_cert_vendor hieradata/codfw.yaml:public_tls_unified_cert_vendor: "globalsign" hieradata/eqiad.yaml:public_tls_unified_cert_vendor: "globalsign" hieradata/esams.yaml:public_tls_unified_cert_vendor: "digicert" hieradata/ulsfo.yaml:public_tls_unified_cert_vendor: "globalsign"
To switch in an emergency:
- Merge a puppet commit changing all of the above hieradata settings to reference the remaining functional vendor.
- Run the puppet agent all cacheproxy hosts via cumin, e.g.
sudo cumin A:cp 'run-puppet-agent -q'