Prove you are not human - use ACME
Tags: devops, security
Published: 2019-10-07 19:28:32

At the core of automation is the removal of humans from the process. We are slow, lazy, temperamental, and generally distracted aspects of the system. Making humans more efficient or removing them from the process is what has propelled mankind through the ages and unlocked limitless innovation. [In a previous post,](https://smallstep.com/blog/automation-secures-the-internet/) I wrote about automating internet security with the Let’s Encrypt certificate authority and the massive acceleration of safe web browsing it has delivered. Today we are proud to announce smallstep **is an official sponsor of Let’s Encrypt!** As we roll out ACME protocol support, we want to thank Let’s Encrypt and the IETF for making it all possible.

[Automated Certificate Management Environment](https://en.wikipedia.org/wiki/Automated_Certificate_Management_Environment) (ACME) is a published internet standard, [RFC 8555](https://tools.ietf.org/html/rfc8555), chartered by the [IETF](https://ietf.org/) working group. We love standards, but what’s particularly cool about ACME is that it was built to automatically obtain certificates, **without any human intervention**. Using ACME is a two-step process. First, an Agent must prove it has control over the entity it is requesting a certificate against. Once control is established, step two enables the agent to request and renew certificates on behalf of that entity using [PKI fundamentals](https://smallstep.com/blog/everything-pki/).

![all your base are](HTTPS://smallstep.com/uploads/all-your-base-are.png "All your base are")[_Screengrab via captaingreedo/YouTube_](https://www.youtube.com/watch?v=FVsijmCFs50)

So how does an agent prove control? It uses one of the [ACME Challenges](https://letsencrypt.org/docs/challenge-types/), most commonly the HTTP challenge. It works something like this:

> **Agent:** I would like a certificate for my [smallstep.com](https://smallstep.com/) website, here is my key.

> **Certificate Authority:** Please prove you own that website by putting this random file in that random place.

> **Certificate Authority:** Also please sign this [cryptographic nonce](https://en.wikipedia.org/wiki/Cryptographic_nonce) to prove you own the key you presented.

> **Agent:** Signs nonce, places file, and signals CA

> **Certificate Authority:** Checks file location and verifies the signature; if both correct, proof of control is established.

It’s a very smart approach to removing humans from the process while keeping proof of control in place. ACME also supports other challenges and the protocol is pluggable in that it can use future challenges not yet standardized. **This is where things get interesting for use cases beyond web servers.** Secure bootstrapping can be challenging in today’s world of distributed applications and devices (IoT anyone?). One path to solving this challenge could be a new ACME challenge combined with an [automated certificate management](https://smallstep.com/production-identity/) solution. It’s early days but we are having very interesting conversations at the intersection of these two ideas and welcome [your input](https://smallstep.com/feedback/).

With smallstep release[ v0.13.0](https://github.com/smallstep/certificates/releases) we now support the ACME protocol to get certificates from [`step-ca`](https://github.com/smallstep/certificates). This means you can run your own private ACME server to issue certificates to internal services and workloads. We also support existing ACME clients and libraries making step-ca quick to integrate into existing environments. There are a ton of ACME integrations (currently [152](https://letsencrypt.org/docs/client-options/) listed) including:

* Development language libraries and clients for java, .net, ruby, rust, PHP, Python…
* Platform clients for Docker, [Microsoft Azure](https://azure.microsoft.com/en-us/), [IBM Openshift](https://www.redhat.com/en/technologies/cloud-computing/openshift), ngnix…
* And a client for damn near anything else you will find inside enterprise environments.

Check out a few detailed examples and learn more about our technical implementation by reading [Run your own private CA & ACME server](/blog/private-acme-server) using `step-ca`.