Why I still have an old-school cert on my HTTPS site
rachelbythebay.com
rachelbythebay.com
I don't mind if the protocol if FUBAR. It works for me and it works for an awful lot of people. And it encrypts the web.
Before that, it was manually re-creating a cert, faffing with chains (converting formats and dealing with bad documentation) and update the production servers manually. It was a royal PITFA.
Don't forget to set a calendar reminder for the next year's renewal.
I think the tooling has improved somewhat since too, although I didn't look too closely.
To me, it feels like most stuff becomes much more troublesome once you peel back the curtain and drop down to the internals. For most folks (myself included), using a web server that handles most of this for you will be enough. There's Traefik, there's Caddy and plenty of other options.
Even Apache has support for ACME with mod_md, about which I wrote on my blog last year: https://blog.kronis.dev/tutorials/how-and-why-to-use-apache-...
It's not perfect (you still need a restart/reload for the new cert to be actually used), but the configuration side of things is simple enough and most of the issues are known: https://httpd.apache.org/docs/2.4/mod/mod_md.html
> Before that, it was manually re-creating a cert, faffing with chains (converting formats and dealing with bad documentation) and update the production servers manually. It was a royal PITFA.
This has always been a pain to me, for example, the OpenSSL CLI is a bit like tar in how unintuitive it is, vs something like the Docker CLI which walks you through a tree of commands with all of their parameters that you might be interested in. Curiously, I've had most success with using graphical software for manually working with certificates, like Keystore Explorer: https://blog.kronis.dev/tutorials/lets-run-our-own-ca
The linked article is a bit barebones (I didn't feel like Googling for the OpenSSL equivalents for the actions to demonstrate the difference in UX), but I want to express the importance and usefulness of your software (CLI, TUI, GUI, API, whatever) telling you what options are available to you, which makes a world of difference.
In my eyes, there's no reason why a junior dev or someone who hasn't worked with OpenSSL (or an equivalent piece of software) in the past should have their first time doing so be miserable. Then again, needing to think about bunches of different formats and what technology accepts what is probably always going to be at least moderately painful or annoying: https://serverfault.com/a/9717
> Don't forget to set a calendar reminder for the next year's renewal.
Thankfully, this is pretty easy to deal with! Even if you use ACME, you'll still want this in place, in case automatic cert renewal fails, or if the cert just isn't swapped over to by the web server.
For example, for the self-hosting crowd, something like Uptime Kuma allows you to have all sorts of reminders, including certificate expiry: https://github.com/louislam/uptime-kuma (note: Uptime Kuma does not batch those notifications, I got about 30 messages in Slack at the same time because a bunch of sites had the same wildcard certificate that was going to expire)
Basically, it's nice to see that as a end user of software you can have a decent experience, for the most part. Definitely a bit better in some regards than what you might have been dealing with 10 years ago or so. Not that all of the problems or nitpicks are solved, or will be for the foreseeable future.
Personal worries: what if Let's Encrypt becomes a non-viable option for whatever reason? There aren't that many ACME compatible providers out there.
> This is about me finding a supposed alternative and going through the same process of due diligence to understand just what I'd be getting into.
I don't think the author has a good understanding of Let's Encrypt. Whatever service the author found claiming to be better seems to be lying, based on the author's experience.
For the benefit of the unfamiliar who stumble upon this, getting a Let's Encrypt certificate is a fairly painful process, unless you make it painful. Many hosting providers have the process built into their offering. For those self-hosting, the certbot client is very easy to use, after setting up your site and domain, which you would need to do regardless of what service you use to obtain a certificate.
It only gets complicated if you have a complicated set-up, such as a non-public site or are perhaps using some specialized web services software, in which case I would assume you are sufficiently technically inclined to overcome the obstacles you yourself built.
In any case, I find free and automated is preferable to expensive and manual.
I expected a web form to fill out (e.g. what domain to do you want, paste your CSR here, etc.), but such a thing didn't exist. The LetsEncrypt site didn't have much useful in the way of instructions except to say "Use Certbot".
So I set up certbot, ran it in manual mode, and got my certificate. Cool. The only problem was that there was a little too much magic. What is this "account" that I'm using to renew my certificate if I never made an account (i.e. username password). What happens if I accidentally delete all the files certbot created for me? And a bunch of other questions.
The documentation I found didn't give a whole lot of straightforward answers. Instead I pieced together information from blogs and forum posts.
I'm hoping the documentation situation has changed, but I can understand how someone can be confused about LetsEncrypt. Many people are happy to use something without any concerns about how it works. Others want to understand and when they find that they can't, they get frustrated.
(I actually ended up writing three different versions, one in PowerShell, then one in F#, and finally one in Rust that I still maintain.)
Once I had it working, I wrote a blog post with a higher-level description of the whole cert flow, which you may find useful: https://www.arnavion.dev/blog/2019-06-01-how-does-acme-v2-wo... It links to the relevant sections of the RFCs, so you can follow along while reading the post.
That's a very liberal interpretation of the article:
> It looks like it was created by people who had been drinking FAR too much of the web kool-aid, since it's chock full of terrible things. It should be a small amount of drama to start a process, receive a magic string, sock it away somewhere at a magic path, then poke the validator and say "go for it". Then you just check back and see whether it worked or not.
> Why not use LE instead then?
If she doesn't like ACME, how would she use LE (the service)?
* ACME is a badly designed standard, a mess of binary-in-base64-in-json-in-canonical-form-hashed-sent-over-http-sent-over-ssl. The author doesn't like it.
* LE invented ACME, and can only be used via ACME
Personally I don't know enough about ACME to say whether the author is right or not - but I've worked with SAML so I know if extensible human-readable text formats are a foot then digital signatures are a gun.
certbot (presuming that's the thing she's talking about the code quality of) can be a bit hard to interface with if you stray outside the default set of use cases, IMO. I don't know why it would be shelling out to openssl, though, when Python has cryptography, which is IMO one of the most pleasant libraries to work with if you need to build X.509 certs or CSRs etc. as it represents those things directly and plainly, and doesn't get in the way.
… if the issuance limits on some random third party CA are a problem, … Let's Encrypt has generous limits.
¹my last experience was Github's API … which will happily have an attribute that's an enum, but not tell you what the variants are. Like … seriously? Azure's docs/data structs permit representing many illegal values easily, and don't document, e.g., when two things are mutually exclusive. The lack of REST in Azure's API means what could have easily been just a single attribute holding a URL gets broken out into 5 different attributes strewn across 3 different structs, a VM's initial image, I am looking at you.
Apache has a little known module as part of the build, at least in Ubuntu: mod_md.
Use this, it is trivial to set up, and completely automated the Let's Encrypt workflow and renewal, no external stuff necessary. It is as simple as adding a few lines to the global config, remove almost all SSL config and restarting the server (twice).
How about we stop trying to micromanage essential services on our servers, and just get on with literally anything else that brings actual value? Let’s encrypt works, it works without attention, it’s free, and ubiquitous.
That's an indicator that your root level certs are not being maintained or updated. That risk is worse than just a few certificate authorities not being recognized.
It's not so easy, since there is always a tradeoff with these things. The exact same argument could be applied to Java as a backend and many people happily do so... until it turns out that some lone guy in Switzerland, who has thanklessly maintained a highly popular logging library for the last 20 years, forgot to sanitise certain inputs. Aaaand now you have remote code execution on Apple's servers and just about every other Fortune 500 company. The world needs more people who scrutinise widely used security relevant software, not less.
I have one of these web sites. After some coaching from a modern web literate colleague, it now autopromotes to https using a LE certificate. It works. Or does it? Half my relatives who access a (private and password protected) photo server promptly reported losing access. This is the still using 32-bit Chrome on Windows XP, save a password in a browser once and then never think about it again, kind of crowd.
Accessibility is something I've always taken a liken to, sometimes maybe obsessively. But them again I interacted and went to workshops with people from places around the world that don't have high speed internet still nor the latest devices.
Look at gov.uk ... That site is an accessibility masterpiece.
Having said that, don't all (public) SSL signing workflows use web technologies in some way? To me, using some web technologies (aka 'kool aid') specifically made for this purpose, such as jwk, feels better than having some intermediaries sending back and forth CSRs, keys, and whatsoever using home-made interfaces and data structures.
The article seems like it's ranting about Let's Encrypt (well it is a little). But a lot of the criticism seems wrong. Ah, the critical quote:
> But what about now? This isn't about Let's Encrypt. This is about me
> finding a supposed alternative and going through the same process of due
> diligence to understand just what I'd be getting into. Somehow, a couple
> of weeks ago, *I found this other site which claimed to be better than LE*
It's ranting about some other scummy service that's never mentioned by name!It's kind of a scam with accounts and logins and a free tier that only lets you do 3 90 day certificates. Rachel likes the web API better. Well, yeah you still want to steer clear of that! (is it https://zerossl.com/pricing/ perhaps?)
So then why not circle back to LE? The reason nobody seems to care about the ACME protocol is that it does get the job done. And if you don't like the "certbot" client, which can be kind-of a pain, there are like 50 other implementations.
https://letsencrypt.org/docs/client-options/
So you might not be able to do wildcard domains and the renewal period is a relatively short 90 days (both by design), but it's trouble free and actually free with no draconian limits.
https://letsencrypt.org/docs/rate-limits/
Well, goodness please use whatever service you want. And if you dislike the code quality of LE enough to pay for a traditional certificate every 2 years, great. But it seems odd to be ranting about LE by name and then throwing a bunch of critiques about another different unnamed service in at the same time.
If you gave up on LE in 2018, you might want to try again. It's honestly pretty decently simple to setup and feels pretty opinionated.
Looking at its metadata, it appears to be from Gandi,[1] which charges US$16/year for a single-address cert that works on standard hosting. (The "free" tier is if you buy Gandi web hosting, which starts at US$6.20/month.)
I use letsencrypt. It's less shifty than normal CA to me.
It has lines like:
_dnsAltnames="$(${ACME_OPENSSL_BIN:-openssl} req -noout -text -in "$_csrfile" | grep "^ *DNS:.*" | tr -d ' \n')"
But in its defense, acme.sh works on all major OSHuh? I haven't looked at the fine print but I use quite a few more domains. Never ran into the rate limits.
It just says "can't establish a secure connection".
Larger sites don't have this problem.
Edit - I stand corrected. Likely I've been confused by a few devices and Linux distros I had that simply broke on that day.
Also, I remember having to manually fix a few Ubuntu servers that day when this happened. Anyone else had that experience around Oct 2021?
Support goes back pretty far.
Edit: this particular device is iPhone 4
In theory you can use MDM to add the LE root cert to your phone's certificate store.
Okay, so Wikipedia says the newest OS for that phone is iOS 7.1.2, which was released June 30, 2014. So you've got a phone with no OS updates, including security patches, in ~8 years. Considering that AFAICT Apple bakes webkit updates into the OS, your browser has not been patched in 8 years. Bluntly, HTTPS certs are the least of the reasons that your device has no business being on the internet.
What a silly statement. Any device any user chooses to has business being on the internet. That's what the world wide web is.
https://letsencrypt.org/2020/12/21/extending-android-compati...
What happened relatively recently was the DST cross sign expired; but any device should, by that point, have received the ISRG root, or you haven't gotten security updates in the last 7 years.
Additionally, there were/are problems with some TLS libraries (e.g., GnuTLS) that have bugs in path building. (Fixes have been made, since LE not working is pretty obvious.) They'll build a path to the expired DST cert, and then conclude (incorrectly) that no other valid path can exist. (When in fact, there is, to LE's own root.)
(Additionally, I've also seen vendors corrupt the ca-certificates directory, and then OpenSSL fails to do path building. This is sort of a pathological case, and probably not your phone's issue.)
All larger sites? Wikipedia uses lets encrypt (although it may depend which data center you hit, i think, not sure). Stack overflow uses lets encrypt.
If its only small sites maybe lets encrypt isn't the problem.