Let's Encrypt kasutamine
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
- Aadressil https://letsencrypt.status.io/ on teenuse avalik monitooringu liides.
- Aadressil https://community.letsencrypt.org/ asub kasujate foorum jms.
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.
Automaatne sertifikaadi uuendamine
Automaatne uuendamine toimub kas cron töö või systemd timeri abil.
cron
# cat /etc/cron.d/certbot .. 0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew
systemd timer
# systemctl list-timers NEXT LEFT LAST PASSED UNIT ACTIVATES Sat 2018-02-03 23:42:52 EET 11h left Fri 2018-02-02 23:42:52 EET 12h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service Sun 2018-02-04 00:00:00 EET 11h left n/a n/a certbot.timer certbot.service
# cat /lib/systemd/system/certbot.service [Unit] Description=Certbot Documentation=file:///usr/share/doc/python-certbot-doc/html/index.html Documentation=https://letsencrypt.readthedocs.io/en/latest/ [Service] Type=oneshot ExecStartPre=/usr/bin/perl -e 'sleep int(rand(3600))' ExecStart=/usr/bin/certbot -q renew PrivateTmp=true
Uute sertifikaatide kasutuselevõtmine
Peale uue sertifikaadi tekkimist peab selle sertifikaadi ka kasutusele võtma. Mõneprogramm puhul piisab reloadist, mõne puhul on vajalik restart; mõnel juhul toimub see nö paratamatult muu tegevuse käigus.
- Apache veebiserver - uus sertifikaat võetakse kasutusele igahommikuse logide roteerimise käigus toimuva reload tulemusena
- Dovecot - TODO
- Postfix - TODO
2020 tähelepanekud
- Ubuntu 18.04 koosseisus on certbot v. 0.27
- ppa aadressil on certbot v. 0.31
- kasutusel oleva acme protokolli versiooni näeb logis /var/log/letsencrypt
- http challenge kasutamine toimub
# certbot certonly -m imre@auul.pri.ee --webroot -w /var/www/html -d www.moraal.ee --preferred-challenges http-01 --agree-tos
acme.sh kliendi kasutamine
2020 aasta kevadel võiks olla üks acme.sh https://github.com/acmesh-official/acme.sh kliendi kasutamise põhjus ecc sertifikaatide tekitamine. acme.sh on üks paljudest populaarsetest lets encrypt klientidest, https://letsencrypt.org/docs/client-options/
Paigaldamiseks sobib öelda
$ git clone https://github.com/acmesh-official/acme.sh.git $ cd acme.sh $ ./acme.sh --install $ crontab -l # 14 0 * * * "/home/imre/.acme.sh"/acme.sh --cron --home "/home/imre/.acme.sh" > /dev/null
http challange
ecc sertifikaadi tekitamiseks sobib öelda
$ acme.sh --issue -w /var/www/html -d example.com --keylength ec-256
Lisaks rsa sertifikaadi tekitamise sobib öelda
$ acme.sh --issue -w /var/www/html -d example.com --keylength
Tundub, et praktiline on veebikohas kasutada paralleelselt rsa ja ecc sertifikaate, nii on teenindatud nö vanemad ja uuemad kliendid.
dns challange
dns challange abil saab lisaks kasutada wildcard sertifikaate, ecc sertifikaadi tekitamiseks sobib öelda
$ acme.sh --issue -d moraal.ee -d '*.moraal.ee' --keylength ec-256 --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please (tekitada dns sissekanne) $ acme.sh --issue -d moraal.ee -d '*.moraal.ee' --keylength ec-256 --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --ecc --renew
Lisaks rsa sertifikaadi tekitamise sobib öelda
$ acme.sh --issue -d moraal.ee -d '*.moraal.ee' --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
Kasulikud materjalid
- https://en.wikipedia.org/wiki/Let%27s_Encrypt
- ACME (Automatic Certificate Management Environment)- https://github.com/ietf-wg-acme/acme/blob/master/draft-ietf-acme-acme.md
- FAQ - https://community.letsencrypt.org/t/frequently-asked-questions-faq/26
- https://letsencrypt.readthedocs.org/en/latest/intro.html