This post is outdated. Especially, ZeroSSL is not the same product as before.
Summary:
My personal opinion is: Avoid using Websites to generate your certificate, but, if you really have to:
-
If you can generate yourself a CSR and know how to use the command line, then use https://gethttpsforfree.com
-
Else, use Free SSL Certificates and SSL Tools - ZeroSSLUpdate 2020: ZeroSSL is not the same product as before.
Let's Encrypt published a few days ago a new policy about Web browser based clients: client-options: document inclusion/update policy. by cpu · Pull Request #377 · letsencrypt/website · GitHub
Some in-browser ACME clients are available, but we do not list them here because they encourage a manual renewal workflow that results in a poor user experience and increases the risk of missed renewals.
I understand the rationale behind that decision. Of course automation must be encouraged.
But sometimes people need to generate a certificate in a hurry, and some of them are not tech savvy. These situations are common; it may be the loss of the person administering the system for example.
When their certificates are about to expires (or already did) they need to solve the problem quickly. After that they can concentrate on a better process (hire somebody, automate the renewal, etc…) and they will have three month for that.
In some case they don't have a server available to run command lines to generate a CSR or execute a client. They just needs the certificates files (private key, certificate and chain), to upload them.
It's important that people in these situations are guided and aware of the risks.
Risks using a web browser based client:
-
You need to trust them because
-
They can generate a certificate for your website up to 30 days after you used their tools
-
They can revoque the certificate because they control the ACME account used to generate them
-
They can decrypt your traffic by keeping the private key they have generated for you if they are able to intercept the encrypted traffic (avoidable by generating a csr offline)
The clients listed on ACME Client Implementations - Let's Encrypt were:
And these were asking for inclusion:
I analyzed two points about them:
-
If the person/company behind it is anonym or if their contact information are available
-
If the basic security measures are taken
Analysis of the clients:
Contact available: Yes (but not easily accessible)
HSTS: Yes with preload
Security headers: No (but probably irrelevant here)
External requests: No
Https configuration: Good
Contact available: partially
HSTS: Yes with preload
Security headers: Some (but probably irrelevant here)
External requests: No
Https configuration: Good
Contact available: Yes
HSTS: yes without preload
Security headers: Some
External requests: Few
Https configuration: Good
contact available: No
HSTS: No
Security Headers: No
External requests: yes
Https configuration: bad
Contact available: No
HSTS: Yes without preload
Security headers:No
External requests:No
Https configuration: Bad
Not loading?
http://web.archive.org/web/20180516030727/https://uglyssl.com/
https://webcache.googleusercontent.com/search?q=cache:https://uglyssl.com/legal.html
Contact available: No
HSTS: No
security headers: No
External requests: Few
Https configuration: Good
Contact available: Yes
External requests: Few
HSTS: Yes with preload pending inclusion
Security headers: Some
Https configuration: Good
(Configuration improved since Please add FreeSSL.tech in-browser ACME V2 client by speed-up-website · Pull Request #374 · letsencrypt/website · GitHub )
That analyst shows that the security of these clients can vary a lot, and even with the best security, the question of trust is unavoidable.
The only solution I see to helps people that need to generate easily a certificate in an emergency case would be a let’s encrypt hosted web based client. That idea was already posted two years ago: Certificates from letsencrypt website without a client
Such solution would:
-
Allow Let’s Encrypt to promote automation with a clear message on that page
-
Completely solve the trust problem
-
Would have no security risk, for Let’s Encrypt nor the users
-
Would have no overhead on Let’s Encrypt server as the client could be 100% javascript
The drawbacks of that solution would be
-
The maintenance of such tool, but it could be done by the community
-
The overhead due to the creation of throwaway ACME accounts, but it already happened with others web based clients
Thoughts?