9
2

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 gravatar image tsk kysyi
20.10.2015 klo 22:41
24917, hyväksyttyjä vastauksia: 7%

Ainakin beta-vaiheessa heillä on melkoisen tiukat rajoitukset 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.

(21.10.2015 klo 15:44) haaja

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.

(04.12.2015 klo 04:38) mikaels

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

Ensin kertaluonteiset:

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]
muokattu 31.07.2016 klo 18:13
ikilinkki
olmari's gravatar image olmari vastasi
13.02.2016 klo 16:27
15625, hyväksyttyjä vastauksia: 25%
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".

(21.02.2016 klo 11:20) Jani Uusitalo

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.

(27.02.2016 klo 00:20) olmari

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/

(06.07.2016 klo 13:18) tsk

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.

ikilinkki
Annttu's gravatar image Annttu vastasi
11.12.2015 klo 18:44
2941211, hyväksyttyjä vastauksia: 42%

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

(14.01.2016 klo 09:42) Bysmyyr

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 :)

ikilinkki
olmari's gravatar image olmari vastasi
26.02.2016 klo 23:27
15625, hyväksyttyjä vastauksia: 25%

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
muokattu 04.01.2017 klo 21:12
ikilinkki
samih's gravatar image samih vastasi
03.01.2017 klo 21:19
113, hyväksyttyjä vastauksia: 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

ikilinkki
tsk's gravatar image tsk vastasi
04.02.2017 klo 11:42
24917, hyväksyttyjä vastauksia: 7%

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ä?

muokattu 11.04.2017 klo 19:52
ikilinkki
Olotila's gravatar image Olotila vastasi
11.04.2017 klo 19:29
114, hyväksyttyjä vastauksia: 0%

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

(11.04.2017 klo 20:08) Bysmyyr

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

(12.04.2017 klo 20:29) Olotila

Sinun vastauksesi

näytä/piilota esikatselu

Tarkkaile kysymystä

Sähköpostitse:

Kirjautumisen jälkeen voit tilata tähän kysymykseen jätetyt uudet vastaukset ja kommentit omaan sähköpostiisi.

RSS-lukijan kautta:

Pelkät vastaukset

Vastaukset ja kommentit

Markdown-perusteet

  • *kursiivi* tai _kursiivi_
  • **lihavointi** tai __lihavointi__
  • linkki:[teksti](http://url.com/ "otsikko")
  • kuva?![alt teksti](/path/img.jpg "otsikko")
  • numeroitu luettelo: 1. Foo 2. Bar
  • Lisätäksesi rivinvaihdon kirjoita kaksi välilyöntiä rivin loppuun.
  • Tavallisemmat HTML-tagit toimivat myös.

Kysymyksen avainsanat:

×1
×1
×1

kysytty: 20.10.2015 klo 22:41

katsottu: 2,617 kertaa

päivitetty: 12.04.2017 klo 20:29

Samankaltaiset kysymykset