Let's Encrypt

URL: https://letsencrypt.org

acme-nosudo

Els scripts de Let's Encrypt s'han d'executar com a root i necessitenn accedir a la clau privada d'usuari. Si no vols haver de fer aixo, pots emprar acme-nosudo.

Pot ser-te util definir aixo per poder copiar i enganxar les comandes de sota:

DOMINI=www.corpetit.com

Clau d'usuari

Cal una clau d'usuari amb la que encriptar la resta. Es bo que sigui exclusiva per a Let's Encrypt. Si no l'has generat encara:

openssl genrsa 4096 > usuari.prv
openssl rsa -in usuari.prv -pubout > usuari.pub

La primera comanda genera la clau privada, i la segona n'extreu la publica.

Clau de domini i CSR

Tambe cal, per a cada domini o grup de dominis, una clau de domini i una peticio de certificat (CSR). Aquesta es la clau que Let's Encrypt signara. De nou, si no les tens encara:

openssl genrsa 4096 > $DOMINI.prv
openssl req -new -sha256 -key $DOMINI.prv -subj "/CN=$DOMINI" > $DOMINI.csr

Es possible associar mes d'un domini a la clau i el CSR, pero per ara nomes en considero un.

Signatura

Ara cal executar l'script sign_crs.py d'acme-nosudo, indicant la clau publica d'usuari i el CSR de domini:

python sign_csr.py --public-key usuari.pub $DOMINI.csr > $DOMINI.crt

Nota que no has hagut de passar la clau privada d'usuari. Aquest es precissament el motiu per emprar aquest script i no l'original de Let's Encrypt.

L'script ens demanara una serie de coses. Executa-les en una terminal diferent pero havent canviat al directori a on has executat l'script. No aturis l'script, ja que els fitxers amb els que treballa (ja els veuras a les comandes que executaras) nomes serveixen per a l'execucio en curs. Basicament et demanara 3 pases:

  • signar un primer grup de fitxers. Si estas fent aixo en un directori net (perque els asteriscs nomes representin un fitxer) aquestes comandes haurien de servir:
openssl dgst -sha256 -sign usuari.prv -out register_*.sig register_*.json
openssl dgst -sha256 -sign usuari.prv -out domain_*.sig domain_*.json
openssl dgst -sha256 -sign usuari.prv -out cert_*.sig cert_*.json
  • signar un darrer fitxer:
openssl dgst -sha256 -sign usuari.prv -out challenge_*.sig challenge_*.json
  • aturar apache a corpetit (el real, ja que cal que Let's Encrypt hi accedeixi) i executar temporalment (i com a root, ja que obrira el port 80) el mini-servidor indicat per pantalla. Compte perque el text a dins de r.wfile.write() es unic per a cada execucio!
python -c "import BaseHTTPServer; \
    h = BaseHTTPServer.BaseHTTPRequestHandler; \
    h.do_GET = lambda r: r.send_response(200) or r.end_headers() or r.wfile.write('tot aixo d'aqui dins es unic'); \
    s = BaseHTTPServer.HTTPServer(('0.0.0.0', 80), h); \
    s.serve_forever()"

Si tot ha anat be, $DOMINI.crt conte el certificat signat.

Apache

Configura SSL per apuntar a la clau privada de domini i al certificat signat:

SSLEngine On
SSLCertificateFile /.../www.corpetit.com.crt
SSLCertificateKeyFile /.../www.corpetit.com.prv

Entra al servidor via https i comprova (candau al costat de la URL) que tot es correcte.

Volver al inicio