9

Let's Encrypt

Let's Encrypt on (tai on pian) ilmainen, automaattinen, turvallinen, avoin yms. palvelu sertifikaattien allekirjoittamieen, eli nk. Certificate Authority.

En ole perehtynyt sen toimintaan syvällisemmin, mutta käsittääkseni siihen kuuluu omalla domainilla ajettava ohjelma, joka automaattisesti ottaa yhteyttä Let's Encryptin palvelimiin, vastaa sen antamiin haasteisiin, joiden perusteella domainen hallinta varmennetaan, ja vielä lopuksi asentaa sertifikaatin paikalleen. Tämän lisäksi sitä kaiketi pystyy jotenkin käyttämään manuaalisesti, jolloin eri vaiheet voi suorittaa erikseen ja/tai tekemään toimenpiteet käsin.

Kysymys nyt kuuluisikin, onkohan sitä mahdollista käyttää Kapsilla olevan oman domainin sertifikaatin hankkimisen a) helposti, b) vaikeasti vai c) ollenkaan? Onko joku jo ehtinyt tätä tutkia?

Tuolla b-kohdalla viittaan esim. tuohon manuaaliseen tapaan. Nythän Kapsin ylläpito asentaa sertifikaatin paikalleen, ja olin jostain lukevinani, että sertifikaatin voimassaoloaika olisi suhteellisen lyhyt (3 kk?). Tuleeko siitä kovasti tuskaa, jos joutuu vähän väliä tekemään tiketin ylläpidolle sertifikaatin vaihtamiseksi.

tsk's avatar
1.3k
tsk
asked 2015-10-21 01:41:13 +0300
edit flag offensive 0 remove flag close merge delete

Comments

Ainakin beta-vaiheessa heillä on melkoisen tiukat [rajoitukset](https://community.letsencrypt.org/t/beta-program-announcements/1631) päällä. Samasta ip-osoitteesta pystyy tekemään vain kaksi rekisteröintiä/viikko. Lisäksi on domain-kohtainen rajoitus, mutta tämä tuksin tulee ongelmaksi. Luultavasti nämä rajoitukset lieventyvät siirryttäessä julkiseen palveluun, mutta en tiedä lieventyvätkö tarpeeksi kapsin tapauksessa.

haaja's avatar haaja (2015-10-21 18:44:27 +0300) edit

Nyt kun public beta alkoi, niin rate limittiä höllennettiin https://community.letsencrypt.org/t/public-beta-rate-limits/4772 Tosin rootinha tuo systeemi tarvis. Olis hieno jos sais Kapsilla toimimaan.

mikaels's avatar mikaels (2015-12-04 06:38:06 +0300) edit

Voiskos joku tutkia miten saadaan acme_tinylla otettua käyttöön tämä uusi wildcard certti? https://community.letsencrypt.org/t/acme-v2-and-wildcard-certificate-support-is-live/55579

tommis's avatar tommis (2018-03-13 23:28:14 +0300) edit

https://github.com/diafygi/acme-tiny/issues/195#issuecomment-372097617 Kehittäjä sanoi ettei aio lisätä wildcard tukea vaikka acmev2 lisääkin.

tommis's avatar tommis (2018-03-14 01:16:15 +0300) edit
add a comment see more comments

20 Answers

11

Koitanpas laittaa tähän noin copy&paste kelpoiset rivit miten sain itse toimimaan:

PÄIVITYS 15.11.2017: Acme-tinyyn on tullut päivitys joka lataa aina kulloisetkin lisenssiehdot automaatisesti kovakoodauksen sijaan, joten ne joilla on jo Acme-tiny niin päivittäkää se komennolla "git pull" kansiossa johon latasitte acme-tinyn.

Ensi kertaa tätä ohjetta seuraavat saavat automaattisesti uusimman version.

Ensin kertaluonteiset:

Pyydä ylläpidolta "Https käyttöön omalle domainille", jotta sivusi palvellaan oikealta palvelimelta. Ohjeet toimivat jokatapauksessa, mutta https toimii vasta pyynnön jälkeen. Eli voit valmistella https vaikka et vielä olisi pyytänytkään tuota. Sitten itse asiaan:

Ladataan Acme-tiny ja annetaan sille suoritusoikeudet:

git clone https://github.com/diafygi/acme-tiny.git
chmod u+x acme-tiny/acme_tiny.py

Luodaan käyttäjälle avain, tämä on privaatti, joten luodaan kotihakemistoon, ja pidetään visusti omana tietona, tätä voi käyttää tarvittaessa useamman, toisistaan riippumattoman, domainin kanssa:

openssl genrsa 4096 > ~/account.key
chmod 600 ~/account.key

Sitten luodaan haluttua sertifikaattia varten oma avain, tämä on domainkohtainen, ja kapsin webbipalvelin tarvitsee myös tämän tiedoston, tämä tallennetaan ~/sites/domain.tld/.ssl/server.key tiedostoon:

openssl genrsa 4096 > ~/sites/domain.tld/.ssl/server.key

Tämän jälkeen luodaan "Certificate signing request" domainnimeä varten. Yhtä domainnimeä/subdomainia varten vaaditaan hieman erilainen komento kuin SNI-sertifikaattia varten (eli sertifikaatti joka kattaa esim domain.tld että www.domain.tld), eli suorita seuraavista joko/tai:

Yhtä domain/subdomainnimeä varten:

openssl req -new -sha256 -key ~/sites/domain.tld/.ssl/server.key -subj "/CN=domain.tld" > ~/sites/domain.tld/.ssl/server.csr

monta domain/subdomainnimeä varten, tämä on hieman hankalan näköinen, mutta pääasia on huomioida nuo DNS:domain.tld kohdat, ylärajaa ei subdomainien määrissä periaatteessa ole, mutta kovin monen kymmenen kohdalla alkaa asiat tukehtumaan pullaansa:

openssl req -new -sha256 -key ~/sites/domain.tld/.ssl/server.key -subj "/" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:domain.tld,DNS:www.domain.tld")) > ~/sites/domain.tld/.ssl/server.csr

Jos myöhemmin haluaa lisätä tai poistaa subdomaineja, niin ajaa vain komennon uudestaan sopivilla domainnimillä.

Seuraavaksi voidaankin jo testata että kaikki toimii, huomionarvoista on että acme-tiny/Let's encrypt vaatii intuituion vastaisesti "pääsyn" suojaamattoman http-yhteyden yli autentikaatio-noncen varmistamiseksi, eli jos sivusto pakko-ohjaa kaiken https:ään, niin tälle pitää tehdä poikkeus (Esimerkki ohjeiden lopussa). Luodaan Let's encryptin vaatima sijainti nonce:a varten:

mkdir -p ~/sites/domain.tld/www/.well-known/acme-challenge/

Komennetaan acme-tiny allekirjoittamaan sertifikaatti, sekä ladataan ajantasainen Let's encryptin intermediate-sertifikaatti

~/acme-tiny/acme_tiny.py --account-key ~/account.key --csr ~/sites/domain.tld/.ssl/server.csr --acme-dir ~/sites/domain.tld/www/.well-known/acme-challenge/ > ~/sites/domain.tld/.ssl/server.crt

wget https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem -O ~/sites/domain.tld/.ssl/ca.crt

Kun komennot suoriutuvat onnistuneesti, oikein konffattu sivusto toimii sivusto https:n yli, kun kapsin Apache-palvelin reloadataan, tämä suoritetaan vuorokausittain automaattisesti.

Tämän jälkeen jäljelle jääkin vain sertifikaatin uusiminen ajoittain, tätä varten loin itse cronia varten skriptin tiedostoon ~/cron/acme-tiny-domain.tld.sh:

#!/bin/bash
~/acme-tiny/acme_tiny.py --account-key ~/account.key --csr ~/sites/domain.tld/.ssl/server.csr --acme-dir ~/sites/domain.tld/www/.well-known/acme-challenge/ > ~/sites/domain.tld/.ssl/server.crt
wget https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem -O ~/sites/domain.tld/.ssl/ca.crt

Annetaan tälle skriptille suoritusoikeudet:

chmod u+x ~/cron/acme-tiny-domain.tld.sh

Ja viimeiseksi lisätään croniin rivi komennolla crontab -e joka samalla logittaa ulosantinsa tiedostoon, sekä suoritetaan 1 kuukauden välein:

0 0 1 * * ~/cron/acme-tiny-domain.tld.sh 2> ~/cron/domain.tld.log

Extra: .htaccess esimerkki, jossa ohjataan kaikki liikenne https, sekä alidomainin uudelleenohjaus + näille säännöille Lets encrypt poikkeus jotta Acme-tiny voi toimia oikein:

# Ohjaa kaikki liikenne HTTPS, paitsi Lets Encrypt
RewriteEngine On
RewriteCond %{ENV:HTTPS} !=on
RewriteCond %{REQUEST_URI} !^/?\.well-known/acme-challenge/
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NC]

# Ohjaa "mail" alidomain uudelle palvelimelle, paitsi Lets Encrypt
RewriteCond %{HTTP_HOST} ^mail\.domain\.tld$ [NC]
RewriteCond %{REQUEST_URI} !^/?\.well-known/acme-challenge/
RewriteRule (.*)$ https://mail.google.com/a/domain.tld [L,R=302,NC]
olmari's avatar
629
olmari
answered 2016-02-13 18:27:48 +0300, updated 2017-11-15 20:32:14 +0300
edit flag offensive 0 remove flag delete link

Comments

1

Kiitos. Ihan suoraan copypastena ei mennyt, paria kohtaa piti täydentää. Acme_tiny.pyltä puuttui kloonattuna suoritusbitti, se piti suorittaa eksplisiittisesti `python acme_tiny.py`. Muutamia hakemistoja piti luoda manuaalisesti: `mkdir -p ~/sites/domain.tld/.ssl ~/sites/domain.tld/www/.well-known/acme-challenge/` Lisäksi domain.tld ja alidomain.domain.tld -paria varten piti alidomainin .htaccessiin lisätä ohjaussääntö `RewriteRule ^(.well-known/acme-challenge/.*)$ http://domain.tld/$1 [L]`, ilman sitä acme "couldn't download http://alidomain.domain.tld/.well-known/acme-challenge/tiedosto".

Jani Uusitalo's avatar Jani Uusitalo (2016-02-21 13:20:42 +0300) edit

Totta, tuota suoritusbittiä ei ole valmiiksi, joten se pitää joko lisätä tai sitten suorittaa ekspliittisesti, lisäänpä ohjeeseen, kiitos huomautuksesta. Tuon kansion luomisenkin voisin lisätä kyllä, mutta alidomainien kanssa ei ole yhtä yleispätevää ohjetta koska alidomaineja voi pyytää "yksittäin" ylläpidolta, tai sitten voi pyytää ja toteuttaa alidomaineille ns. wildcard ohjauksen päädomainiin ja hoitaa alidomainit itse htaccess:illa monin eri tavoin, joten tarpeita ja tapoja tuon well-known:in tekoon on useita.

olmari's avatar olmari (2016-02-27 02:20:14 +0300) edit

Kyhäsin tätä ohjetta mukaillen itselleni Ansible-skriptin, joka laittaa tiedostot ja cron-jobin paikoilleen. Kirjoitin siitä pienen kuvauksen: https://tsk.iki.fi/2016/07/kapsi-lets-encrypt-ansible/

tsk's avatar tsk (2016-07-06 16:18:12 +0300) edit

Voiskos joku tutkia miten saadaan acme_tinylla otettua käyttöön tämä uusi wildcard certti? https://community.letsencrypt.org/t/acme-v2-and-wildcard-certificate-support-is-live/55579

tommis's avatar tommis (2018-03-13 23:28:23 +0300) edit

https://github.com/diafygi/acme-tiny/issues/195#issuecomment-372097617 Kehittäjä sanoi ettei aio lisätä wildcard tukea vaikka acmev2 lisääkin.

tommis's avatar tommis (2018-03-14 01:16:20 +0300) edit
add a comment see more comments
2

Kapsin uusi (kokeellinen, mutta osittain jo tuotannossa) web-backend tukee myös Let's Encrypt sertifikaattien hakua automaattisesti.

Uudet vhostit tehdään jo oletuksena uudelle web-backendille ja sitä kautta saavat automaattiseesti LE-sertifikaatin. Ylläpito voi pyynnöstä migratoida sivuston uudelle backendille jolloin omaa LE-sertifikaatinhakuskriptiä ei tarvitse (enää) :)

daedalus's avatar
283
daedalus
answered 2020-01-31 16:43:10 +0300
edit flag offensive 0 remove flag delete link

Comments

add a comment see more comments
2

Tuo Let's encryptin oma työkalu on kovin epäsopiva Kapsin ympäristöön koska se haluaisi sertifikaatin lisäksi myös mm. muuttaa www-palvelimen asetuksia, mikä ei näin Kapsin tapauksessa toki käy päinsä.

Ahkeralla säätämisellä tuon työkalun saa kuitenkin toimimaan mutta ei mitenkään helposti. Sen sijaan tarjolla on merkittävästi yksinkertaisempia työkaluja, jotka tekevät vain ja ainoastaan sertifikaatin hakemiseen tarvittavat operaatiot.

acme-tiny on yksi tämmöinen työkalu. Sillä sertifikaatin saa generoitua kohtuullisen kivuttomasti ja tämän jälkeen kopioi sen sivuston ~/sites/sivusto.domain/.ssl hakemistoon server.crt nimelle. Myös avain tulee olla salasanatta tiedostossa ~/sites/sivusto.domain/.ssl/server.key sekä mahdollinen ca-sertifikaatti tiedostossa ~/sites/sivusto.domain/.ssl/ca.crt. Korvaa kaikista edellä mainituista sivusto.domain omalla domainillasi.

Koska Let's encryptin sertifikaatit ovat voimassa vain 90 päivää kerrallaan, tulee sertifikaatti uusia kohtuullisen usein. Suosittelenkin että tätä varten tekee esimerkiksi kerran kahdessa kuukaudessa ajettavan crontab-scriptin joka generoi uuden sertifikaatin ja asettaa sen paikalleen.

Annttu's avatar
1.1k
Annttu
answered 2015-12-11 20:44:56 +0300
edit flag offensive 0 remove flag delete link

Comments

Tämä toimi, kiitos ohjeista. Tuon lisäksi toki tarvitsee pyytää ylläpitoa fixaamaan dns:n

Bysmyyr's avatar Bysmyyr (2016-01-14 11:42:59 +0300) edit
add a comment see more comments
1

Totta, suoritusbitti puuttuu, ekspliittisen suorittamisen lisäksi voi siis antaa sen suoritusbitin, lisään ohjeisiin, hyvä huomautus.

Alidomaineita varten ei olekkaan yhtä oikeaa ohjetta, kun niitä voi kapsilla joko pyytää "yksittäisinä" ylläpidolta tai vaihtoehtoisesti pyytää ja toteuttaa wildcard-ohjaus päädomainiin jonka alla sitten määritellä itse alidomainit htaccess:illa, teidän ohje toimii ainakin ensimmäisen kanssa :)

olmari's avatar
629
olmari
answered 2016-02-27 01:27:03 +0300
edit flag offensive 0 remove flag delete link

Comments

add a comment see more comments
0

Minä en saanut toimimaan, miten lähden troubleshoottaamaan? Olen tehnyt vain nämä asiat, en mitään muuta, eli ehkä jokin itsestäänselvyys on jäänyt pois? (Kiitos Olmarille ohjeesta)

Acme-tiny toimii,

Avaimet sain tehtyä,

Annoin tämän komennon openssl req -new -sha256 -key ~/sites/OMA.DOMAIN/.ssl/server.key -subj "/CN=OMA.DOMAIN" > ~/sites/OMA.DOMAIN/.ssl/server.csr,

Loin acmehaasteelle kansion,

Latasin ca.crt sertifikaatin mainitulla komennolla ja näyttää olevan paikoillaan,

Muokkasin .htaccess -tiedostoa,

Olen odottanut muutaman vuorokauden että apache olisi varmasti restartattu,

mutta sivusto ei toimi kuin httpeen yli, eli https sivua ei löydy.

Mitä tehdä?

Olotila's avatar
31
Olotila
answered 2017-04-11 22:29:38 +0300, updated 2017-04-11 22:52:51 +0300
edit flag offensive 0 remove flag delete link

Comments

ootko pyytäny https:n aktivointia ylläpidolta. jos en aivan väärin muista niin ainakin itellä se vaadittiin...

Bysmyyr's avatar Bysmyyr (2017-04-11 23:08:23 +0300) edit

Kiitos vinkistä, pyysin, ei ole vielä vastattu.

Olotila's avatar Olotila (2017-04-12 23:29:03 +0300) edit
add a comment see more comments
0

Saan virheen " error: Your local changes to the following files would be overwritten by merge: acme_tiny.py Please, commit your changes or stash them before you can merge. Aborting "

Mitä tehdä?

Olotila's avatar
31
Olotila
answered 2017-11-15 20:51:00 +0300
edit flag offensive 0 remove flag delete link

Comments

Git sanoo noin Jos/kun acme_tiny.sh:ta on muokannut käsin, varmaankin sitä "DEFAULT_CA" riviä on joskus muokkailtu. Tähän auttaa esim "git stash" ja sitten se "git pull". Tämä johtuu siis siitä että git seuraa kaikkea muutoksia tiedostoihin mitä on git:illä ladattu, ja tämän jälkeen acme_tiny.sh ei enää stemmaa vähintäin aikaleimaan, joten tulee tuo ilmoitus. Stash piilottaa omat muutokset jolloin pull taas voi toimia.

olmari's avatar olmari (2017-11-16 00:57:30 +0300) edit
add a comment see more comments
0

Saan virheen: " error: Your local changes to the following files would be overwritten by merge: acme_tiny.py Please, commit your changes or stash them before you can merge. Aborting " Mitä tehdä?

Olotila's avatar
31
Olotila
answered 2017-11-15 20:51:30 +0300
edit flag offensive 0 remove flag delete link

Comments

add a comment see more comments
0

Saman virheen sain minäkin:

kestosippi@lakka:~/acme-tiny$ git pull
remote: Counting objects: 9, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 9 (delta 6), reused 9 (delta 6), pack-reused 0
Unpacking objects: 100% (9/9), done.
From https://github.com/diafygi/acme-tiny
   7ef9164..4ed1395  master     -> origin/master
   7ef9164..4ed1395  travis-ci  -> origin/travis-ci
Updating 7ef9164..4ed1395
error: Your local changes to the following files would be overwritten by merge:
    acme_tiny.py
Please, commit your changes or stash them before you can merge.
Aborting
Jorma's avatar
394
Jorma
answered 2017-11-15 22:04:35 +0300, updated 2017-11-15 22:05:21 +0300
edit flag offensive 0 remove flag delete link

Comments

add a comment see more comments
0

http://kestosippi.kapsi.fi/netti/kapsiv…

Onko tässä kyseessä jokin toinen varmennepalvelu kuin LetsEncrypt jota olen yrittänyt käyttää. Operan osoiterivin lukkokuvake näyttää tämän.


Eikös aiemmin riittänyt salaukselle että sivusto on tehty secure-www hakemistoon? Nytkö on käytettävä LetsEncrypt-viritelmiä? Vai olenko käsittänyt koko jutun väärin?

Jorma's avatar
394
Jorma
answered 2017-11-05 11:51:23 +0300, updated 2017-11-05 11:59:28 +0300
edit flag offensive 0 remove flag delete link

Comments

Jorma's avatar Jorma (2017-11-05 11:52:09 +0300) edit

"HTTPS-protokolla on käytössä kaikissa muotoa alidomain.kapsi.fi olevilla verkkosivustoilla." https://www.kapsi.fi/ohjeet/web2.html

mikaels's avatar mikaels (2017-11-05 22:53:36 +0300) edit
1

Lapsilla on käytössä oma varmenne joka on käytössä *.kapsi.fi, eli kattaa myös kestosippi.kapsi.fi Tämä ohje käsittelee omia domainnimiä joita hostataan kapsilla, esimerkiksi olmari.fi

olmari's avatar olmari (2017-11-16 00:51:55 +0300) edit
add a comment see more comments
0

Mielestäni en ole muokannut acme_tiny:ä mitenkään mutta silti vaati käskyn git stash ennen git pull käskyä. Ja ohjelman suoritusoikeus menee myös pois päältä gitt pull:ssa.

rapularaimo's avatar
203
rapularaimo
answered 2017-11-17 11:01:24 +0300, updated 2017-11-17 11:02:15 +0300
edit flag offensive 0 remove flag delete link

Comments

Suoristusoikeudet pitää antaa uudestaan chmod u+x acme-tiny/acme_tiny.py

mikaels's avatar mikaels (2018-01-02 03:53:06 +0300) edit
add a comment see more comments

Your Answer

Login/Signup to Answer