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 +0200
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 +0200) 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 +0200) 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 +0200) 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 +0200) edit
add a comment see more comments

20 Answers

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 +0200
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 +0200) edit
add a comment see more comments
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 +0200, updated 2017-11-15 20:32:14 +0200
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 +0200) 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 +0200) 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 +0200) 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 +0200) 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 +0200) 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 +0200
edit flag offensive 0 remove flag delete link

Comments

add a comment see more comments
0

Itse käytin oman domainin sertifikaatin hakemiseen Letsencryptiltä Getssl-skriptiä, jonka sai loppujenlopuksi myös aika pienellä vaivalla toimimaan.

Kohtuu hyvät ohjeet löytyy osoitteesta: https://github.com/srvrco/getssl

Tässä ehkä tärkein muutos on, että poistaa käytöstä Getssl:n ominaisuudet, joihin ei ole oikeusia, kuten palvelimen uudelleenkäynnistyksen. Lisäksi tulee huomioida sertifikaattitiedostojen sijainti:

# Location for all your certs, these can either be on the server (full path name)
# or using ssh /sftp as for the ACL
DOMAIN_CERT_LOCATION="/home/users/tunnus/sites/domain.tld/.ssl/server.crt"
DOMAIN_KEY_LOCATION="/home/users/tunnus/sites/domain.tld/.ssl/server.key"
#DOMAIN_CERT_LOCATION="ssh:server5:/etc/ssl/domain.crt"
#DOMAIN_KEY_LOCATION="ssh:server5:/etc/ssl/domain.key"
CA_CERT_LOCATION="/home/users/tunnus/sites/domain.tld/.ssl/ca.crt"
#CA_CERT_LOCATION="/etc/ssl/chain.crt"
#DOMAIN_CHAIN_LOCATION="" # this is the domain cert and CA cert
#DOMAIN_KEY_CERT_LOCATION="" # this is the domain_key and domain cert
#DOMAIN_PEM_LOCATION="" # this is the domain_key. domain cert and CA cert
samih's avatar
31
samih
answered 2017-01-03 23:19:47 +0200, updated 2017-01-04 23:12:41 +0200
edit flag offensive 0 remove flag delete link

Comments

add a comment see more comments
0

Ansiblessa näyttää olevan nykyään moduuli sertifikaatin hakuun. En ole kokeillut (vielä), mutta pistän linkin tänne tiedoksi:

https://docs.ansible.com/ansible/letsencrypt_module.html

tsk's avatar
1.3k
tsk
answered 2017-02-04 13:42:16 +0200
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 +0200, updated 2017-04-11 22:52:51 +0200
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 +0200) edit

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

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

Minä sain toimimaan ensimmäisen kerran. Mutta nyt sertifikaatin uusimisen jälkeen se tarjoaa edelleen sitä vanhaa sertifikaattia (ja selain herjaa). Olen odottanut jo kaksi vuorokautta... Restartataanko apache varmasti kerran vuorokaudessa?

sazius's avatar
157
sazius
answered 2017-08-12 00:37:33 +0200
edit flag offensive 0 remove flag delete link

Comments

add a comment see more comments
0

Tarvitseeko https jotain aktivointia?

Jorma's avatar
394
Jorma
answered 2017-10-18 22:41:57 +0200
edit flag offensive 0 remove flag delete link

Comments

DNS ilmeisesti vaatii rukkausta, ainakin olen joutunut sitä pyytämään.

rapularaimo's avatar rapularaimo (2017-10-18 23:00:00 +0200) edit
1

Lisäsin ohjeeni alkuun että https aktivointi pitää pyytää ylläpidolta. Tähän juurisyynä on että jos https "tuki" olisi päällä domainille joka ei tarjoa https-sertifikaattia ja selain sitä pyytää, niin tarjotaan kapsi.fi sertifikaatti ja se ei toki voi toimia. Siksi se pitää erikseen pyytää, mutta kieltämättä nuo "oma domain" ohjeet ei sitä erityisesti selvästi kerro https://www.kapsi.fi/ohjeet/domain.html

olmari's avatar olmari (2017-10-19 19:22:50 +0200) edit

Jos on intoa ja hyvä ajatus, miten tuota domain-ohjetta voisi parantaa, niin muutoksia ohjeeseen voi yrittää tyrkyttää sivun https://github.com/kapsiry/kapsi-verkkosivut kautta.

tsk's avatar tsk (2017-10-26 20:50:04 +0200) edit
add a comment see more comments
0

Kummallista kyllä mulla alkoi toimimaan https-sivut vaikka en ole vielä pyytänyt mitään tähän liittyvää ylläpidolta. Noiden ohjeiden mukaan vaan ajoin kaikki loitsut eilen ja nyt testasin sivustojani.

Jorma's avatar
394
Jorma
answered 2017-10-19 22:57:06 +0200, updated 2017-10-19 23:02:44 +0200
edit flag offensive 0 remove flag delete link

Comments

add a comment see more comments
0

Kuinkakohan saisin toimimaan Siilossa? Mulla on Siilossa tallessa taloyhtiön hallitukselle jaettuja suuria dokumentteja Nextcloud-ohjelmassa joka on siis asennettu sinne siiloon. Olis turvallisemman tuntuista jos selaimessa olisi lukon kuva kun Nextcloudia selaillaan.

Jorma's avatar
394
Jorma
answered 2017-10-19 23:00:51 +0200
edit flag offensive 0 remove flag delete link

Comments

Hei, ihan samalla tavalla kuin tuossa Olmarin ohjeessa mutta vaihdat vain polkujen tilalle tyyliin ~/siilo/sites/domain.tld

mikaels's avatar mikaels (2017-11-03 21:54:47 +0200) edit
add a comment see more comments

Your Answer

Login/Signup to Answer