49
© AKAMAI - EDGE 2016 ACME – Let’s Encrypt Your Origin Stephen Ludin – Chief Architect, Akamai – BoD, ISRG

Edge 2016 acme - lets encrypt your origin

Embed Size (px)

Citation preview

Page 1: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

ACME – Let’s Encrypt Your OriginStephen Ludin – Chief Architect, Akamai – BoD, ISRG

Page 2: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

A PKI Primer

Page 3: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Our cast of characters

Alice Bob Eve

Page 4: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

A little ditty about Alice and Bob

All Alice and Bob want to do is peacefully pass notes in class without interference

from Eve.

Page 5: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

U R Sweete1bf4190ce

U RSweet

e1bf4190ce ???

Page 6: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

U RSweet692ha1ac43

U RSweet

e1bf4190ce

U Smell

Page 7: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

We have not solved ANYTHING!

Page 8: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

How does Bob know this reallyIS Alice’s public key?

Page 9: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Enter, Carol Carol’s job is simple:

• Get Alice’s public key

• Verify that it really is Alice

• Sign Alice’s public key saying “This really is Alice”

• Give her (Carol’s) public key to Bob

Page 10: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

X

Page 11: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Page 12: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

FreeAutomatic

SecureTransparent

OpenCooperative

Page 13: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

TLS Everywhere

Page 14: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Over 10,000,000 active certificatesOver 13,500,000 active domains

Page 15: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Page 16: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Page 17: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Demo

Page 18: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Yes, It’s that easy(mostly)

Page 19: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

CreateKey Pair

CreateSignedCSR

Send CSR

To CAValidate

CACreates/

Signs Cert

Install Cert

Page 20: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

For many of us…

certbot

Page 21: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Where certbot excels

A small infrastructure• Single webserver for example

Can run certbot on the machine that needs the keyAre running a supported webserverDesigned to be fully automated with little knowledge required

Page 22: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

“But, that’s not me!”

Page 23: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

(and that’s why you are here)

Page 24: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

The Voodoo BehindLet’s Encrypt

Page 25: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

ACMEAutomated Certificate

Management Environment

Page 26: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

“…a protocol for automating the management of domain-validation

certificates, based on a simple JSON-over-HTTPS interface.”

Page 27: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

REST

Page 28: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Something for Everyone

45 Clients14 Libraries

10 Languages

Page 29: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Protocol::ACME

Page 30: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Page 31: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

A few notes…

Page 32: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Staging versus Production

acme-staging.api.letsencrypt.org

acme-v01.api.letsencrypt.org

No Rate Limits“Fake” Root

Rate LimitsTrue Root

Page 33: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

JWS / Nonce

Everything is Protected with JWS and Nonces:

"header": { "alg":"RS256", "jwk": { "e":"AQAB", "kty":"RSA", "n":"<n> } },"payload" : <payload>,"protected": <protected_header>,"signature": <sig>

Page 34: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Account Key – Your ID

$ openssl genrsa –out account_key.pem 2048

Page 35: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Let’s Code

Page 36: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Getting Started

perlmy $acme = Protocol::ACME->new( host => $le_host,

account_key => $key, mailto => $email );

REST

Page 37: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

directory - Get a list of REST end points

perl$acme->directory();

RESTGET: https://<host>/directory

Page 38: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

reg / new-reg – Lookup or register account key

perl$acme->register();

RESTPOST: https://<host>/acme/new-regJWS( mailto: <your email> )

Page 39: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Accept Terms of Service

perl$acme->accept_tos();

RESTPOST: https://<host>/acme/reg/IDJWS ( “agreement”: “<TOS URL>” )

Page 40: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

authz – Request a validation challenge

perl$acme->authz( $domain );

RESTPOST: https://<host>/acme/reg/IDJWS ( identifier: { type => DNS, value = <domain> } )

Page 41: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Challenges

dns-01: Add a specific TXT record to DNS

tls-sni-01: Provision a specific certificate at the domain

http-01: Place a specific object a the domain

Page 42: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Challenges

Protocol::ACME helps with Challenge automation:• Protocol::ACME::Challenge::SimpleSSH• Protocol::ACME::Challenge::LocalFile• Protocol::ACME::Challenge::Manual

my $challenge = Protocol::ACME::Challenge::SimpleSSH->new(

{ ssh_host => <my_host>, www_root => ”/opt/local/www/htdocs” } )

Page 43: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Handle Challenges

perl$acme->handle_challenge( $challenge );

RESTFollow instructions to do it by hand

Page 44: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Check challenges

perl$acme->check_challenge();

RESTPOST https://<host>/<challenge_id>JWS( keyAuthorization: token + fingerprint )

Page 45: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

new-cert: Submit the CSR and get the certificate

perlmy $cert = $acme->sign( $csr );

RESTPOST https://<host>/new-certJWS( csr: <DER encoded CSR> )

Page 46: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

The whole thing…

my $acme = Protocol::ACME->new( host => $le_host,account_key => $key, mailto => $email );

$acme->directory();$acme->register();$acme->accept_tos();$acme->authz( $domain );$acme->handle_challenge( $challenge );$acme->check_challenge();my $cert = $acme->sign( $csr );

Page 47: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Install your Certificate

Page 48: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Renew

Page 49: Edge 2016 acme - lets encrypt your origin

© AKAMAI - EDGE 2016

Questions?