Techcrunch SSL Cert Expired
techcrunch.com
techcrunch.com
If you've heard of Caddy but haven't used Caddy 2 yet, we've made some huge improvements with it, and it's capable of managing tens of thousands of certificates at a time. As of next week's beta it can handle certificates with lifetimes as short as a few minutes. It works as a load balancer, in a cluster behind load balancers, and with Docker with its new dynamic config API. There's no technical reasons I know of why sites like TechCrunch can't use it.
Caddy is written in Go, a memory safe language. I cannot overstate how significant it is that most servers like ngixn, Apache, and HAProxy are written in C and cannot offer the same security guarantees.
Caddy will also staple OCSP, in the most robust way compared to other servers. It has weathered outages that took Apache and NGINX sites down (in Firefox).
We've also seen CertBot consume high amounts of resources at scale, whereas Caddy can handle thousands of certs no problem. That's why some companies have talked to me about why they switched.
Caddy can coordinate cert management in a cluster. This happens automatically when configured with the same storage backend. CertBot doesn't do that. Caddy works great behind reverse proxies, or as the reverse proxy.
Perhaps most importantly, Caddy is the only server to use HTTPS by default without needing any explicit configuration. You simplify your deployment workflows and have less room for things to go wrong.
There's also a values statement here... If you think privacy and security are important, you choose software that enables privacy by default because it aligns with your values.
Sure, any number of solutions can get you TLS and a few even get you TLS via ACME, but Caddy (2) is highly optimized to handle the edge cases and scaling requirements a lot of sites have these days.
You don't have to run Caddy as root in production, even to bind to low ports. (None of my sites do.) https://memorysafety.fail for more info on memory unsafety.
You had said:
> Go's memory safety isn't some kind of automatic security guarantee...
But in some cases, it is. I'm not claiming more than that, nor am I saying that you can't have "bugs of other kinds" -- on which point I agree with you.
Fair enough, it's easy to misunderstand the intended tone in online comments.
Asking because I run Go based servers (in production) on Linux, and they're not running any of the Go processes as root.
It seems like they've fixed their systemd config though to run as a non-privileged user, so that shouldn't be an issue. But it seems like Go processes can't drop privileges because of an open issue with the runtime.
See also: https://github.com/containous/traefik/issues/1631, https://github.com/containous/traefik/issues/1641, https://github.com/containous/traefik/issues/1637, https://github.com/containous/traefik/issues/1636, and https://github.com/containous/traefik/issues/1632
Of course there is - a web server that gets a certificate via LE is a single screw. A commercial internet-facing site is a high rise. One does not just replace a screw in a high rise -- it requires ensuring that the right tools are in every toolbelt to manipulate the screws. For Caddy to be useful in a non- oh look ma, i'm on the internet projects, it needs to fit into the tooling system.
For example, it should be fetching storing certificates in a database that can be accessed by multiple servers. Rather than doing everything behind the scenes, it should be emitting events indicating its desire to renew a cert and let someone else handle ( maybe a different caddy ) handle the renewals, etc, etc, etc.
By the way, Caddy CAN store certs in a database accessed by multiple servers. It coordinates cert management when configured as a cluster, automatically. Caddy is the only server that does this (for free).
Every single operational reason is a technical reason if it touches operation of the technology.
> By the way, Caddy CAN store certs in a database accessed by multiple servers. It coordinates cert management when configured as a cluster, automatically. Caddy is the only server that does this (for free
An edge web server should carry no knowledge of a concept of a cluster. It should simply be able to ask something for a cert. Otherwise it is a screw that insists that in order for it be used in high rise, it needs to be used in a specific pattern that the screw designer envisioned.
If you want to make Caddy easily adoptable in high rises I suggest the following path:
1. Subscribe to events saying "fetch this cert from here"
2. Emit events saying "Need to renew X" when you need to renew.
3. Create ability to forward renew requests to renew requests processor.
4. Make request processor update the cert store and emit the event that the key pair is available.
Caddy doesn't. That's what's so interesting!
> It should simply be able to ask something for a cert.
It does.
> I suggest the following path:
Oh good! That's pretty close to how it actually works already!
I'm happy to explain more how Caddy actually works before we start armchairing solutions here. Or, feel free to read the code for yourself: https://github.com/mholt/certmagic/
Once you can run multiple processes and have service discovery, the need for this stuff goes away. For example, I use cert-manager to get certificates for my Envoy edge proxy. cert-manager runs continuously and updates the TLS certificates in a Kubernetes secret. Kubernetes injects the secret into the Envoy container as files, and then Envoy reads them without any knowledge of where they come from or how they can be renewed. (It could also be configured to get them at runtime with xDS / Universal Data Plane API). This is all very easy and provides infinite interchangeability; there would be no change in cert provisioning necessary if I switched to Nginx or HAProxy.
But, most people don't have a setup that supports something like this, so they really need the all-in-one thing or they're just going to say "we don't really need TLS". They get by because nothing in their infrastructure ever changes; certs are new because they require operator intervention every 90 days and that is a new experience. It is unfortunate, but that's where most of the world is at right now.
However if an author of the solution does insist on implementing it in one binary with orchestration step being in the code rather than pulled out into the infrastructure management, the author should not be surprised that no one outside tiny single server operations would consider it to be a contender.
All we're saying with this project is, "There is a better way going forward, and we're solving that problem."
Here's a typical problem of a distributed entry point system - network partitioning.
* If your key/cert store relies on key servers being always accessible from everywhere, it simply won't work.
* If your solution is to bake a key into a file system, then it is no better than existing nginx implementation.
Basically, if you want your solution to be adopted, it needs to be significantly better than the entrenched ones.
The next problem that people will run into is that because they can't reliably run multiple "things", they won't have a monitoring stack to tell them that certs aren't renewing. But, maybe nothing bad will happen and it won't be a problem. "Hope is not a strategy" if you're a Google SRE, but people do pretty OK with hope in the real world ;)
Can you elaborate on this? I'm not sure I follow; there's nothing preventing people from using something like https://ohdear.app/ (or any other monitoring tool) with a self-contained solution like Caddy. In fact, I recommend that people do.
This isn't how I like it, but I totally see the use case. Caddy is a part of that use case and is probably the reason it exists. I think that's fine!
(Edit: ohdear is really neat though, I think people might want that no matter what. You have to serve your status page from somewhere, might as well get some cert checks thrown in for free!)
Sort of agreed with this.
Based on my experience, the reality is a bit more complicated. As soon as one is past the "this VM is a special pet and it is the only one I have" stage in my experience even smaller companies get dozens and soon hundreds of distinct HTTPs entry points:
* Main site/API ( code )
* Ops support
* bizops ( invoicing/quoting )
Which is where the issues of monitoring and observability come up.
I bet techcrunch has close to a hundred HTTP/HTTPS entry points and every time they evaluate a solution to replace their current entry point structure they ask if the new method would at least solve all of their existing problems. Ops people aren't gong to add another partial solution so the mix.
I wouldn't be so sure about that. It's certainly possible that's the case but equally I've personally seen new sites on Techcrunch's scale literally served from a couple of a couple of boxes running Wordpress (I kid you not!) which sits behind a few more boxes running pretty aggressive Varnish profiles and then that is sat behind Akamai's CDN. Most of the content on news sites is static and highly cache-able so there isn't always the need to go down the micro-services route.
For example, does it run RabbitMQ anywhere? Rabbitmq admin front-end is HTTP. Same goes for Kafka and other applications and we aren't even touching bizops.
My point isn't to say you're wrong, just that there will be as many exceptions to your point as there are occasions it's accurate.
Also I'm not suggesting you make it front and centre but as it is currently there's only one mention on your landing page and it's buried so far deep it might as well not be mentioned at all. I did also look through some of the other docs and still missed it. If I missed it you can bet others have too. All I'm suggesting is that it's worth being a little more explicit about that because that will be a key detail for some people.
You mention about it being written in Go. That seems less relevant (in my personal opinion) but that's a great place to add a line saying something like
"Caddy uses the ACME protocol to automatically manage secure certificates issued by Let's Encrypt."
> That's clearly not always the case otherwise we wouldn't be having this conversation to begin with.
Well, sometimes we forget that HN is not actually the center of all new tech. ;) This discussion is a bit of an exception. Most of our leads don't come from HN.
But I will see what we can do to make that more obvious once we're out of beta.
Which is good but now we're back to my original question: "What CA's does Caddy support?"
It shouldn't be that hard of a question to find the answer to but it seems even you can't give me a straight answer and that's really off putting.
> Well, sometimes we forget that HN is not actually the center of all new tech. ;) This discussion is a bit of an exception. Most of our leads don't come from HN.
You were the one who posted the link! If the landing page isn't designed for HN audiences then maybe that's not the link you should have posted on HN?
I know it's hard taking what seams like criticisms when it's your own projects (I maintain popular open source projects too so have experienced this first hand many times myself) but sometimes it pays not to default on the defensive. I'm not saying you have to listen to nor agree with all feedback given -- and obviously I don't expect you to entertain people who are just rude or demanding -- but it's an order of magnitude harder for people to raise legitimate constructive comments or genuine questions / concerns if they're back-footed.
From the site: "Any ACME-compatible CA can be used." Relevant config parameter: https://caddyserver.com/docs/json/apps/tls/automation/polici...
> It shouldn't be that hard of a question to find the answer to but it seems even you can't give me a straight answer and that's really off putting.
Um, my bad? I said I would try to improve this when I have time.
> You were the one who posted the link!
And the HN commenters proceed to think they are the central source of a project's vitality and popularity. I can post the link, but that is not where most of Caddy's traffic comes from. A bit self-aggrandizing of the HN crowd to assume that their opinion is the one true way; but this is true of most mob mentalities.
> but sometimes it pays not to default on the defensive.
Ah, so you think I'm being defensive... I see... I guess it is hard these days to have a discussion of facts and ideas without thinking about it in terms of attack/defense.
Anyway... I admit, I digress into lamenting the state of the HN community, which is off-topic.
The logical extreme of this statement is that @mholt shouldn't post a link to any website unless that link is specifically tailored to the average reader of the site he's posting to. That, or Hacker News is special among all websites @mholt could post to.
I don't think that's fair. I also don't see the defensiveness you see - instead, I see @mholt explaining his website's strategy for the benefit of your understanding (as well as that of any future readers). The alternative to which would be not responding to your feedback at all, as he already has sound reasoning not to incorporate your specific suggestion (which we know because he explained it).
It's important to read into the best possible interpretation of a comment and respond to that, assuming good faith, especially on communities like this one. Otherwise we begin to assume everyone is attacking or defending.
Regarding the link point. I don’t agree. If you purposely post a promotional link saying “use my tool” to a specific forum then you can’t really backtrack and say “you’re not my intended audience for this page” when people raise questions based on incomplete information published to that link. That’s just bad product advertising. Or at the very least, you should add a disclaimer saying “this is normally a manager link (etc)”.
As it happens, I am actually the target audience for that landing page because I am a tech lead responsible for making architecture-based decisions and the number of HTTP end points we have is few because that’s not the main side of our business (so certs often get forgotten about). That’s why I was asking the questions I was asking.
Right now I use the official HAProxy container + the official certbot container and a script that renews all my domains and then sends a sig-HUP to HAProxy to reload the certs. It mostly works but there have been a few hickups (HAProxy not starting because of the README file in the live LetsEncrypt folder; however if you send an HUP, it ignores it fine).
Has anyone used Traefik? Is it worth switching to over HAProxy+Certbot?
1) Prometheus + blackbox_exporter https://www.robustperception.io/get-alerted-before-your-ssl-...
2) Sensu/Nagios https://github.com/sensu-plugins/sensu-plugins-http/blob/mas...
3) Openssl in a crontab:
echo | openssl s_client -connect ${DOMAIN}:443 -servername ${DOMAIN} -verify_hostname ${DOMAIN} 2>/dev/null | openssl x590 -noout -startdate -enddate techcrunch.com
Issued by: DigiCert SHA2 Secure Server CA
Expires: Wednesday, 2 March 2022 at 12:00:00 GMTMost TC links get uBlocked completely now with adtech run amok.
Just use monitoring with alerts.
At that point, calendar reminders ain't going to cut it. And I imagine that TechCrunch-Oath-AOL-Yahoo-Verizon has at least that much complexity.
12h long certificate was used
https://www.webase.com/blog/pro-tip-makesure-your-ssl-cert-d...
This is bad, but at least the domain name didn't expire!
Even if automated, actually especially if automated, that's four times a year you can have complete site failure if something goes wrong.
ps. would be nice if firefox could easily override expired certs for advanced users like self-signed certs
IMO Let's Encrypt is the best way to manage an SSL cert these days.
Being good at catching errors doesn't soften the blow of the errors being so readily occurring in the first place.
Yes it does. If you can see the errors you can change your usage pattern or request a rate limit override. Flying blind is the worst way to go!
[1] EDIT: In the long-term, that is, not that individual site's interaction.
Though in most cases I just leave the site.
My list of containers will become a bit unwieldy in time, I think. I should probably consolidate some types and take the hit a bit on some cookie sharing behind the scenes.
What a mess.