Announcing Certbot: EFF's Client for Let's Encrypt
eff.org
eff.org
I'd like to make a point about money: Institutions like these need money, or many important public goods will never exist. Consider that next time you are making donations or your legislators want to cut funding.
You certainly could.
However, every donation has opportunity costs in multiple dimensions, and if you walk down the "can I have better impact somewhere else" path, you'll find it rife with circularities and get nowhere.
Instead of the top N _best_ candidates to donate to, I usually look for N _good_ ones, and be done with it.
[1]: http://motherboard.vice.com/read/the-secret-life-of-a-silk-r...
No direct mention of the EFF, but I'll take your word for it. Of course even if Assad, Erdoğan, and Putin donate money to the WWF, that does not mean saving panda's is a bad thing.
1. Let's Encrypt, the certificate authority
2. ACME, the protocol for users to interact with Let's Encrypt
3. Boulder, an implementation of an ACME server in Go that Let's Encrypt uses
4. Certbot (formerly the Let's Encrypt client), a command line client and ACME library for Python, originally developed by the Let's Encrypt team
Any CA can use ACME to offer automated certificate issuance to their users. Anyone can implement an ACME server or client in any language. There is no "official" client or server necessary.
It's also important that Certbot was rebranded to distance it from Let's Encrypt because, personally, I think the project is doomed to fail. It tries to handle both certificate issuance and configuration of software using certificates. It attempts to abstract the process for someone who barely understands what certificates/SSL/TLS are (if at all), but requires so much detail from them in order to configure and run the client that they might well have just learned how it worked in the first place. In other words, Certbot's use case targets laymen, but requires non-layman understanding to use. It doesn't help that their documentation is very badly organized and confusing, often mixing content for the CLI and the Python Library, which have different audiences: end users and developers building an automated tool in Python.
Meanwhile, intermediate and advanced developers and system administrators who understand the concepts are much better served by a different client that simply takes care of certificate issuance without trying to automatically manage the software they will be using the certificate with. There are many, but so far I've been happy with Lego (https://github.com/xenolf/lego).
But if lego works for you; that's great!
https://github.com/certbot/certbot/issues/2373 will track implementation a nicer version of that functionality; it'll probably be --no-lineages (lineages are Certbot's notion of a succession of renewed or updated certificates that replace each other; they live in /etc/letsencrypt/live, though you can put them somewhere else with the --config-dir option)
I have acme-tiny run with its own private user privilages monthly in a cron job and it's pretty slick. Only has access to the account key and writing to the http challenges and cert directories, no private key access.
[0] https://github.com/diafygi/acme-tiny Edit: clarification
Permissions are more granular on your setup, though, as far as I can see.
For the many folks who want the previous behaviour, they'll need to run certbot-auto --non-interactive (-n for short).
Trying to install stuff without the users permission, and using sudo without the users intent is really not right. How can we trust this if they do such things?
It looks like it is running a sudo command with a python script with scripts under a non-root user. This means that anyone who can write data to that non-root user folder can then run things as root.
ie. I can drop in a .py file and execute whatever code I want. Code run with sudo should not allow this.
That all said, it's still bad form to `apt-get -y` when run with a `--help` flag. Particularly with the `-y flag`. Even if you trust LetsEncrypt (and most of us would), it's still unexpected / non-idiomatic behavior and the `-y` flag means users don't get much time to cancel the operation should any output concern them.
"Because not all operating systems have packages yet, we provide a temporary solution via the letsencrypt-auto wrapper script, which obtains some dependencies from your OS and puts others in a python virtual environment: <instructions to download and run letsencrypt-auto>"
If users don't read the label before downloading and running a script, they might be surprised by what it does. But we've learned that users don't read those instructions and get upset anyway, so cerbot-auto now asks for additional interactive permission before installing things.
I thought that was why repos like https://github.com/diafygi/letsencrypt-nosudo existed for a time.
That's good news nonetheless.
But with some extra work you can definitely run Certbot as a non-root user, and we're working with the OSes that package us to have Certbot operate with something like ssl-cert group privileges in many situations in the future.
I just chose Acme-tiny because it was tiny and didn't have many of the bells and whistles like wrapping revocation or a DNS verification that I didn't need. Neat and nifty features for certain, but I try to keep it stupid simple. I wanted something with a small footprint I could understand and domesticate.
Thanks for all your work, the EFF is awesome and so is Certbot. Letsencrypt has been a lifesaver. Keep up the good work!
Using the same key pair for multiple certificates is necessary for public key pinning, since Let's Encrypt only issues certificates that last 90 days. I would love to see this feature get developed further.
https://github.com/diafygi/acme-tiny
Edit: Looks like https://github.com/lukas2511/letsencrypt.sh is capable of doing the same, as pointed out in another comment.
So do like Github does (did?)[0], and make the pins valid for 5 minutes.
[0] looks like they upped it to 60 days?
That kinda defeats the point of HSTS. If the key is changing regularly, it makes it easy for an attacker to just temporarily prevent access to the site for long enough for the pin to timeout, and then present their own certificates and keys.
The biggest feature the official letsencrypt client was missing was triggering restarts of other services after certificate renewal.
There has been a lot of misunderstanding and FUD about how you can use Let's Encrypt because of the relatively heavy and by default "invasive" official client. This hopefully helps to make it clearer that it is one option of many.
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
"certbot-auto accepts the same flags as certbot; it installs all of its own dependencies and updates the client code automatically."I don't know whether to be terrified or horrified.
If you don't like wget; chmod, you can check a gpg signature too: https://certbot.eff.org/docs/intro.html#installation
You're probably thinking of TLS-SNI-01, which requires changes on the host that's terminating TLS (which isn't possible on a load balancer unless it has dedicated support for ACME).
Running the client on one of the servers frequently results in it hitting one of the other servers in the cluster. It's a pain in the ass - you either rely on luck and retry a number of times until it hits the right server, or you have to go the more manual route and deploy the challenge directory to all of the servers.
DNS doesn't care how many servers there are, as long as there's the right record in place.
https://github.com/letsencrypt/boulder/issues/593
That was the main blocking issue. IPv6 in LE is coming very soon.
[1]: https://letsencrypt.org/2016/03/09/le-client-new-home.html