Let's Encrypt kasutamine

Allikas: Imre kasutab arvutit

Sissejuhatus

Märkus 20160528 - tundub, et paari viimase kuu jooksul on olukord muutunud, letsencrypt nimi on nüüd certbot, https://certbot.eff.org/docs/. Debian v. 8 Jessie puhul tuleb tekstis toodud käskudes teha asendus, sh apt-get käsu juures

letsencrypt -> certbot

Let's Encrypt https://letsencrypt.org/ sertifitseerimisteenuse pakkuja, mis

  • väljastab levinud operatsioonisüsteemide ja brauserite (ja muude programmide) poolt tunnustatud x509 sertifikaate
  • väljastab sertifikaate tasuta
  • sertifikaatide genereerimise lahendus võimaldab korraldada automaatset sertifikaatide uuendamist

Kasulikud aadressid

Tööpõhimõte

Üldiselt töötab Let's Encrypt selliselt

  • veebiserveris, millel on avalik ip aadress ja kus sertifikaati kasutatakse, on paigaldatud letsencrypt tarkvara
  • letsencrypt programmi kävitamisel genereeritakse saladusi, muu hulgas privaatne võti ja kõneksoleva domeeni sertifikaadi csr; ja pöördutakse Let's Encrypt isanda poole
  • selleks, et isand teenindaks peab isand saama veenduda, et sertifikaadi soov on põhjendatud; selleks ühelt poolt paigutab klient oma veebiserveri juurikasse /.well-known/ kataloogi ootuspärase saladuse ja isand pöördub sertifikaadipäringus näidatud domeeninime kasutades veebiserveri poole (st sertifikaadi saamisel on piisav kui taoleja saab kirjutada veebiserveri juurikasse, seetõttu nimetatakse LE sertifikaate DV (Domain Validated))
  • kui kõik klapib, tekib kliendi failisüsteemi komplekt faile ning saab hakata sertifikaati kasutama
393301    4 -rw-r--r--   1 root     root         1793 Mar  7 00:19 /etc/letsencrypt/archive/mail.moraal.ee/cert1.pem
393303    4 -rw-r--r--   1 root     root         1675 Mar  7 00:19 /etc/letsencrypt/archive/mail.moraal.ee/chain1.pem
393302    4 -rw-r--r--   1 root     root         1708 Mar  7 00:19 /etc/letsencrypt/archive/mail.moraal.ee/privkey1.pem
393304    4 -rw-r--r--   1 root     root         3468 Mar  7 00:19 /etc/letsencrypt/archive/mail.moraal.ee/fullchain1.pem

Lisaks esmasele sertifikaadi genereerimisele pakub Let's Encrypt ka vahendid sertifikaadi uuendamiseks.

Järgnevalt tegeldakse pisut elulisema juhtumiga, olgu sertifikaatide käsitlemisele seatud sellised nõuded

  • sertifikaatide kasutamine toimub nat tulemüüri taga töötavates serverites (https, smtps, imaps jne)
  • sertifikaatide registreerimine, uuendamine ja tühistamine toimub ühes nn haldusarvutis
  • ühegi sertifikaatidega seotud dns nimega ei toimu port 80 peal teenuse kasutamist (vajadusel tehakse redirect vastavale https ressursile)
                           internet
      
                              |
                            __|__   10.204.62.115:443/25 - tulemüüri väline ip, https ja smtp teenused
                           |     |  10.204.62.116:993 - tulemüüri väline ip, imaps teenus
                           |     |  10.204.62.115,116:80 - tulemüüri väline ip, letsencrypt klient
                           |_____|
                              |
                              |
                              |
             ----|------------|---------------|-----------------|----------------|------
                 |                            |                 |                |
               __|__                        __|__             __|__            __|__
              |     |                      |     |           |     |          |     |
              |_____|                      |_____|           |_____|          |_____|
 
             LE haldus                    https server      smtp server      smtps server

kus

  • ainult LE haldus serveris töötab letsencrypt tarkvara ja sinna on suunatud 10.204.62.115 ja 116 port 80 pöördumised
  • LE arvuti teenindab ise vaid /.well-known uri; muud redirectib kuhu vaja vastava https:// aadressile teenuse juurde (eeldusel, et teenused töötavad ainult https:// peal)
  • letsencrypt töötab certonly ja webroot režiimis, st ta ainult tegeleb sertifikaatide registreerimise jms ja ei tegele paigaldamisega; ja kasutab olemasoleva veebiserveri abi saladuse kontrollimisel

Tarkvara paigaldamine

Tarkvara paigaldamiseks sobib Debian v. 8 Jessie keskkonnas lisada backports repositoorium

deb http://ftp.ee.debian.org/debian/ jessie-backports main contrib non-free

ja öelda

# apt-get install -t jessie-backports certbot

Tarkvara paigaldamiseks sobib Debian v. 9 Stretch keskkonnas öelda

# apt-get install certbot

Kasutamine

Test sertifikaadi kasutamine

Test sertifikaadi tekitamine

# letsencrypt --test-cert certonly --standalone -d www2.auul.pri.ee -d www3.auul.pri.ee -d www4.auul.pri.ee

Uuendamine, enne kui expire lähedal on

# letsencrypt renew --force-renewal

certonly režiim koos webroot kasutamisega

Kasutamise eelduseks on töötav veebiserver, mis teenindab http://le7.auul.pri.ee/ päringuid. Sertifikaadi esmane registreerimine

# letsencrypt certonly -m priit@auul.pri.ee --webroot -w /var/www/le -d le7.auul.pri.ee \
  --agree-tos --standalone-supported-challenges http-01

IMPORTANT NOTES:
- If you lose your account credentials, you can recover through
  e-mails sent to imre@auul.pri.ee.
- Congratulations! Your certificate and chain have been saved at
  /etc/letsencrypt/live/le7.auul.pri.ee/fullchain.pem. Your cert
  will expire on 2016-06-12. To obtain a new version of the
  certificate in the future, simply run Let's Encrypt again.
- Your account credentials have been saved in your Let's Encrypt
  configuration directory at /etc/letsencrypt. You should make a
  secure backup of this folder now. This configuration directory will
  also contain certificates and private keys obtained by Let's
  Encrypt so making regular backups of this folder is ideal.
- If you like Let's Encrypt, please consider supporting our work by:

  Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
  Donating to EFF:                    https://eff.org/donate-le

kus

  • -m eposti@aadress on vajalik kõnealuses arvutis ainult letsencrypt programmi esmasel käivitamisel
  • --webroot -w /var/www/le - millisesse kataloogi acme saladuse kontrollimiseks vajalik materjal paigutada
  • -d le7.auul.pri.ee - millist domeeninime sertifikaat sisaldab (ühe käsu juures võib esineda mitu '-d argument' komplekti
  • --agree-tos - kasutustingimustega nõustumine
  • --standalone-supported-challenges http-01 - acme saladuse kontrollimiseks kasutatakse ainult port 80 liiklust

seejärel piisab

# letsencrypt certonly --webroot -w /var/www/le -d le8.auul.pri.ee \
  --standalone-supported-challenges http-01

standalone režiim

standalone režiimis kasutatakse letsencrypt sisemist veebiserverit, st ei ole vaja ja isegi segab muu veebiserveri töötamine.

Apache plugin

Apache plugin kasutamisel toimub ideaalsel juhtumil kõik automaatselt, st saadakse sertifikaat ja seadistatakse Apache.

# letsencrypt --apache
IMPORTANT NOTES:
- If you lose your account credentials, you can recover through
  e-mails sent to priit@auul.pri.ee.
- Congratulations! Your certificate and chain have been saved at
  /etc/letsencrypt/live/le.auul.pri.ee/fullchain.pem. Your cert will
  expire on 2016-06-03. To obtain a new version of the certificate in
  the future, simply run Let's Encrypt again.
- Your account credentials have been saved in your Let's Encrypt
  configuration directory at /etc/letsencrypt. You should make a
  secure backup of this folder now. This configuration directory will
  also contain certificates and private keys obtained by Let's
  Encrypt so making regular backups of this folder is ideal.
- If you like Let's Encrypt, please consider supporting our work by:

  Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
  Donating to EFF:                    https://eff.org/donate-le

Sertifikaat

$ openssl x509 -in /tmp/le.auul.pri.ee -noout -text
Certificate:
   Data:
       Version: 3 (0x2)
       Serial Number:
           02:42:f6:de:f7:c2:4d:bf:e1:b5:18:4e:5e:7f:a2:3a:9a:e7
   Signature Algorithm: sha256WithRSAEncryption
       Issuer: C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X1
       Validity
           Not Before: Mar  5 18:47:00 2016 GMT
           Not After : Jun  3 18:47:00 2016 GMT
       Subject: CN=le.auul.pri.ee
       Subject Public Key Info:
           Public Key Algorithm: rsaEncryption
               Public-Key: (2048 bit)
               Modulus:
                   00:ad:bd:35:d0:67:b2:58:70:bc:12:8d:ca:20:c7:
                   05:d7:2c:a9:63:40:21:f4:95:90:4e:d4:3a:c7:fe:
..
       X509v3 extensions:
           X509v3 Key Usage: critical
               Digital Signature, Key Encipherment
           X509v3 Extended Key Usage: 
               TLS Web Server Authentication, TLS Web Client Authentication
           X509v3 Basic Constraints: critical
               CA:FALSE
           X509v3 Subject Key Identifier: 
               3A:FF:60:1F:B7:AB:45:BB:B5:F7:D4:19:08:B2:57:3E:F6:39:19:A8
           X509v3 Authority Key Identifier: 
               keyid:A8:4A:6A:63:04:7D:DD:BA:E6:D1:39:B7:A6:45:65:EF:F3:A8:EC:A1

           Authority Information Access: 
               OCSP - URI:http://ocsp.int-x1.letsencrypt.org/
               CA Issuers - URI:http://cert.int-x1.letsencrypt.org/

           X509v3 Subject Alternative Name: 
               DNS:le.auul.pri.ee
           X509v3 Certificate Policies: 
               Policy: 2.23.140.1.2.1
               Policy: 1.3.6.1.4.1.44947.1.1.1
                 CPS: http://cps.letsencrypt.org
                 User Notice:
                   Explicit Text: This Certificate may only be relied upon by Relying Parties and only 
                     in accordance with the Certificate Policy found at https://letsencrypt.org/repository/

   Signature Algorithm: sha256WithRSAEncryption
        2b:a5:4f:05:42:21:d8:c6:57:ad:61:f7:d7:62:63:f6:22:81:
        48:67:f0:c9:8d:13:9f:d1:23:51:78:54:81:13:ae:0c:1f:3c:

Apache SSL seadistused

..
SSLCertificateFile /etc/letsencrypt/live/le.auul.pri.ee/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/le.auul.pri.ee/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
# cat /etc/letsencrypt/options-ssl-apache.conf
..
SSLEngine on

# Intermediate configuration, tweak to your needs
SSLProtocol             all -SSLv2 -SSLv3
SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:\
 ECDHE-ECDSA-AES256-GCM-  SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:\
 ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:\
 ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:\
 DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:\
 AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:\
 !EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder     on
SSLCompression          off

SSLOptions +StrictRequire

manual režiim

Kui mingil põhjusel on vaja käivitada letsencrypt tarkvara ühes serveris ja veebikoht asub teises, siis saab seda teha nii

# letsencrypt certonly --manual

seejärel öeldakse mis sõned kuhu paigutada veebiserveris. Tundub, et see on üsna tülikas praktiliseks kasutamiseks, eriti automaatse uuendamise seisukohast.

certbot skripti kasutamine (mitte paketihaldusest)

certbot skripti kasutamine mitte paketihaldusest võib olla asjakohane nt Debian v. 7 Wheezy või Ubuntu v. 14.04 operatsioonisüsteemi keskkonnas, kus paketihalduses (sh backportsides) puudub certbot tarkvara. Tekitada privilegeerimata kasutaja:grupp certbot:certbot (parool jääb määratlemata, st saab ligi sudo jms vahenditega)

# groupadd certbot
# useradd -g certbot -m -d /opt/certbot -s /bin/bash certbot

Kasutajal peab olema määratud parool ja lisatud sudo gruppi (selleks, et ta saaks pakette paigaldada, küllap seda on palju, aga alustuseks ehk käib küll)

# grep certbot /etc/sudoers
# certbot ALL=(ALL:ALL) NOPASSWD: ALL

Käivitada kasutajana certbot-auto

# su - certbot
$ wget https://dl.eff.org/certbot-auto
$ chmod 0755 certbot-auto
$ ./certbot-auto

Tulemusena paigaldatakse nö Harju keskmisse arvutisse lisaks paketid (seejuures automaatselt lisatakse wheezy backports repo) ning tekitatakse certbot kasutaja alla pythoni virtualenv keskkond

 augeas-lenses cpp cpp-4.9 gcc gcc-4.9 libasan1 libatomic1 libaugeas0 libc-dev-bin libc6-dev libcilkrts5 libcloog-isl4 libexpat1-dev
 libffi-dev libgcc-4.9-dev libisl10 libitm1 liblsan0 libmpc3 libpython-dev libpython2.7-dev libquadmath0 libssl-dev libtsan0 libubsan0
 linux-libc-dev python-chardet-whl python-colorama-whl python-dev python-distlib-whl python-html5lib-whl python-pip-whl
 python-pkg-resources python-requests-whl python-setuptools-whl python-six-whl python-urllib3-whl python-virtualenv python2.7-dev
 python3-pkg-resources python3-virtualenv virtualenv zlib1g-dev

Tundub, et kui arvutis on Apache virtual hostisid kirjeldatud, siis paigaldamise lõpus ta kohe uurib, et kas teeme serte ka.

Sertifikaadi tellimine

$ ./certbot-auto certonly -m imre@auul.pri.ee --webroot -w /srv/www.moraal.ee -d moraal.ee -d www.moraal.ee \
  --standalone-supported-challenges http-01 --agree-tos
Requesting root privileges to run certbot...
  /opt/certbot/.local/share/letsencrypt/bin/letsencrypt certonly -m imre@auul.pri.ee --webroot \
  -w /srv/www.moraal.ee -d moraal.ee -d www.moraal.ee --standalone-supported-challenges http-01 --agree-tos
[sudo] password for certbot: 

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/moraal.ee/fullchain.pem. Your cert will
   expire on 2016-08-26. To obtain a new or tweaked version of this
   certificate in the future, simply run certbot-auto again. To
   non-interactively renew *all* of your ceriticates, run
   "certbot-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Uuendamine

# su - certbot
$ ./certbot-auto --no-self-upgrade renew
Requesting root privileges to run certbot...
 /opt/certbot/.local/share/letsencrypt/bin/letsencrypt --no-self-upgrade renew
[sudo] password for certbot: 
 
-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/moraal.ee.conf
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/moraal.ee/fullchain.pem
-------------------------------------------------------------------------------

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/moraal.ee/fullchain.pem (success)
# systemctl reload apache2

Edasiseks automaatseks uuendamiseks sobib kasutada nt sellist cron tööd

# cat /etc/cron.d/certbot 
10 3 * * * certbot cd /opt/certbot && ./certbot-auto --no-self-upgrade renew

Probleemid

  • Kui sertifikaat on ära aegunud, siis sama domeeninimega sertifikaadi edasi kasutamiseks tuleb anda sama käsk nagu tema esmasel tellimisel; st tegu ongi uue sertifikaadi tellimisega ja asutakse kasutama uut salajast võtit (ehk ka issuer'it) ning sertifikaati. See on ebamugavam kuna rakenduse juures tuleb asendada ainult sertifikaadi asemel kaks või kolm komponenti. Kataloogi /etc/letsencrypt/archive/mail.moraal.ee ilmuvad järgmise jrk numbriga faili, cert2.pem jne.

Kasulikud materjalid