Would it be possible to sign a currently hosted self signed certificate without using the LE client? The LE servers can do DNS lookups, contact the domain, check the certificate details and just create a new CSR from the public key, sign it and return it. If the CN matches on the self signed certificate, isn’t that proof enough that the public key is running on the domain? Plus no need for any temporary servers or special files. Or am I missing something? Is this a supported proof method of the ACME protocol?
This is not supported in the ACME protocol, but you can use the existing private key if you want. The problem is that the self-signed certificate has itself as the Issuer within the certificate; there is no way in X.509 to “sign” that without replacing the Issuer data, which would make for a new certificate. (Additionally, the certificate serial number and other data related to how to verify it – like the policy references and OCSP distribution points – would need to change.)
So, you can keep your private key, but you can’t keep your self-signed certificate itself if you want a Let’s Encrypt-signed cert. And that’s not really a policy issue, but a technical issue about the structure of X.509 certificates.
That is what I meant, to completely make a new certificate but based on the same public key. I apologise for my poor explaination and I’m not an expert at X.509. The public key is fetched from the domain by LE, then the CSR is created with whatever defaults, then signed and returned. Then once you get the proper signed certificate from LE, you can use it instead of your self signed one. It seems too good to be true, but I cant think of a downside to this. Oh wait, I guess if someone hacks your DNS they could quickly use the service to make and host a free certificate on a bad server which would be quite bad.
Yeah, there is no ACME protocol support for doing this in exactly the form that you describe. There is no verification method where simply having a pre-existing self-signed cert is accepted as evidence for the verification.
But the client should still make it quite fast and easy to get a cert using an existing public/private keypair, if that’s what you want.
I think that’s essentially the same question as this one:
Short answer: Yes.