On Tuesday, 14 February 2017 17:55:18 UTC, Jakob Bohm wrote: > Unfortunately, for these not-quite-web-server things (printers, routers > etc.), automating use of the current ACME Let's encrypt protocol with > or without hardcoding the Let's Encrypt URL is a non-starter for anyone > using these things in a more secure network and/or beyond the firmware > renewal availability from the vendor.
Whilst I agree there are challenges, I think greater automation is both possible and necessary for these things. > On a simple network where public certs are acceptable, such devices > will often need to get renewed certificates long past the availability > of upstream firmware updates to adapt to ecosystem changes (such as > Let's Encrypt switching to an incompatible ACME version in the year > 2026 or WoSign free certs becoming a thing of the past in 2016). Ecosystem changes that make stuff stop working are much more likely to be algorithmic changes (Does your printer know SHA-3? Elliptic curve crypto? Will it work if we need quantum-resistant crypto?). > On a secure network, existence and address of each such device should > not be revealed to an outside entity (such as Let's encrypt admins), > let alone anyone who knows how to read CT logs. For such devices I > generally use an in-house CA which is trusted only in-house and uses > the validation procedure "The subject is known personally to the CA > admin and the transport of the CSR and cert have been secured by > out-of-band means" Like the manual verification of SSH host fingerprints, I fear such a system most often looks successful because it's not coming up against any serious adversaries rather than because it's actually implemented in a sound way. Unless everybody is very careful it easily becomes the Yale lock of PKIs, successfully keeping out small children and sufficient to show legally that you intended to forbid entry, but not exactly an impediment to organised criminals. Also it's weird that you mentioned transporting the CSR and certificate out of band. I can kind of get that if you take the CSR from the device to the CA issuer by hand then you feel as though you avoid MITM replacement of the CSR so it makes your reasoning about the Subject simpler. But why the certificate ? In this scenario (personal knowledge of subject's identity) I am currently fairly confident that something like SCEP is the right approach. As with your manual system I expect that SCEP will often be deployed in a fashion that does not resist attack, but in _principle_ it's possible to have this work well and unlike hordes of workers traipsing about with CSR files it might actually scale. > Similarly, it would be useful to have an easily findable tool/script > for doing ACME in a semi-offline way that doesn't presume that the ACME > client has any kind of direct control over the servers that will be > configured with the certificates. Such a tool could be installed once > by a site and then used to generate certs for the various "web-managed" > devices that need them. Probably for that type of environment you'd want to do DNS validation: That is, have your certificate-obtaining tool able to reach out to your DNS service and add TXT records for validation so that it can obtain a certificate for any name in the domains you control. Of course the parameters of how exactly this works will vary from one site to another, particularly depending on which DNS servers they use, and whether they're a Unix house or not. Also it matters whether you're going to have the devices create CSRs, or just inject a new private key when you give them a certificate. Here's an example of Steve, who hand-rolled such a solution, his approach also deploys the certificates via SSH but for the "web-managed" devices you mention that isn't an option and may need to remain manual for now. https://www.crc.id.au/using-centralised-management-with-lets-encrypt/ You'll also see people building on other Unix shell tools like: https://github.com/srvrco/getssl or https://acme.sh/ Inevitably an OpenBSD purist has written one in C that's split into a dozen privilege-separated components: https://kristaps.bsd.lv/acme-client/ And somebody who likes Python, but didn't fall in love with Certbot (the EFF's Python ACME implementation that was once the "official" client) wrote: https://github.com/plinss/acmebot _______________________________________________ dev-security-policy mailing list [email protected] https://lists.mozilla.org/listinfo/dev-security-policy

