Automatic Certificate Management Environment#API version 2

{{Short description|Protocol to manage public key certificates}}

File:ACME–protocol-icon.svg

The Automatic Certificate Management Environment (ACME) protocol is a communications protocol for automating interactions between certificate authorities and their users' servers, allowing the automated deployment of public key infrastructure at very low cost.{{cite web |url=https://www.zdnet.com/home-and-office/networking/securing-the-web-once-and-for-all-the-open-encryption-project/ |title=Securing the web once and for all: The Let's Encrypt Project |publisher=ZDNet |author=Steven J. Vaughan-Nichols |date=9 April 2015}}{{cite web |last=sh |title=ietf-wg-acme/acme-spec |url=https://github.com/ietf-wg-acme/acme/ |access-date=2017-04-05 |publisher=GitHub}} It was designed by the Internet Security Research Group (ISRG) for their Let's Encrypt service.

The protocol, based on passing JSON-formatted messages over HTTPS,{{cite web|url=https://threatpost.com/eff-others-plan-to-make-encrypting-the-web-easier-in-2015/109451/|title=EFF, Others Plan to Make Encrypting the Web Easier in 2015|publisher=ThreatPost|date=18 November 2014|author=Chris Brook}} has been published as an Internet Standard in {{IETF RFC|8555}}{{cite IETF |title=Automatic Certificate Management Environment (ACME) | rfc=8555 |last1=Barnes |first1=R. |last2=Hoffman-Andrews|first2=J. |first3= D. |last3 = McCarney|last4=Kasten |first4=J. |date=2019-03-12 |publisher=IETF |accessdate=2019-03-13}} by its own chartered IETF working group.{{cite web |title=Automated Certificate Management Environment (acme) |url=https://datatracker.ietf.org/wg/acme |work=IETF Datatracker |access-date=2019-03-12}}

Client implementations

The ISRG provides free and open-source reference implementations for ACME: certbot is a Python-based implementation of server certificate management software using the ACME protocol,{{cite web |title=Certbot |url=https://certbot.eff.org/ |publisher=EFF |access-date=2016-08-14}}{{cite web |url=https://github.com/certbot/certbot |title=certbot/certbot |publisher=GitHub |access-date=2016-06-02}}{{cite web |url=https://lwn.net/Articles/687308/ |title=Announcing Certbot: EFF's Client for Let's Encrypt |publisher=LWN |date=2016-05-13 |access-date=2016-06-02}} and boulder is a certificate authority implementation, written in Go.{{cite web |url=https://github.com/letsencrypt/boulder |title=letsencrypt/boulder |publisher=GitHub |access-date=2015-06-22}}

Since 2015 a large variety of client options have appeared for all operating systems.{{Cite web|url=https://letsencrypt.org/docs/client-options/|title=ACME Client Implementations - Let's Encrypt - Free SSL/TLS Certificates|website=letsencrypt.org|date=20 February 2025 }}

API versions

= API version 1 =

API v1 specification was published on April 12, 2016. It supports issuing certificates for fully-qualified domain names, such as example.com or cluster.example.com, but not wildcards like *.example.com. Let's Encrypt turned off API v1 support on 1 June 2021.{{Cite web |date=2021-05-05 |title=End of Life Plan for ACMEv1 - API Announcements |url=https://community.letsencrypt.org/t/end-of-life-plan-for-acmev1/88430/27 |access-date=2021-06-12 |website=Let's Encrypt Community Support}}

= API version 2 =

API v2 was released March 13, 2018 after being pushed back several times. ACME v2 is not backwards compatible with v1. Version 2 supports wildcard domains, such as *.example.com, allowing for many subdomains to have trusted TLS, e.g. https://cluster01.example.com, https://cluster02.example.com, https://example.com, on private networks under a single domain using a single shared "wildcard" certificate.{{Cite web|url=https://letsencrypt.org/2017/06/14/acme-v2-api.html|title=ACME v2 API Endpoint Coming January 2018 - Let's Encrypt - Free SSL/TLS Certificates|website=letsencrypt.org|date=14 June 2017 }} A major new requirement in v2 is that requests for wildcard certificates require the modification of a Domain Name Service TXT record, verifying control over the domain.

Changes to ACME v2 protocol since v1 include:{{Cite web|url=https://community.letsencrypt.org/t/staging-endpoint-for-acme-v2/49605|title=Staging endpoint for ACME v2|date=January 5, 2018|website=Let's Encrypt Community Support}}

  • The authorization/issuance flow has changed
  • JWS request authorization has changed
  • The "resource" field of JWS request bodies is replaced by a new JWS header: "url"
  • Directory endpoint/resource renaming
  • URI → URL renaming in challenge resources
  • Account creation and ToS agreement are combined into one step. Previously, these were two steps.
  • A new challenge type was implemented, TLS-ALPN-01. Two earlier challenge types, TLS-SNI-01 and TLS-SNI-02, were removed because of security issues.{{Cite web |date=2020-12-08 |title=Challenge Types - Let's Encrypt Documentation |url=https://letsencrypt.org/docs/challenge-types/ |access-date=2021-05-12 |website=Let's Encrypt}}{{cite IETF |title=Automatic Certificate Management Environment (ACME) | rfc=8555 |last1=Barnes |first1=R. |last2=Hoffman-Andrews|first2=J. |first3= D. |last3 = McCarney|last4=Kasten |first4=J. |date=2019-03-12 |publisher=IETF |accessdate=2021-05-12|quote=The values "tls-sni-01" and "tls-sni-02" are reserved because they were used in pre-RFC versions of this specification to denote validation methods that were removed because they were found not to be secure in some cases.}}

See also

References

{{reflist}}