9
3

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: 6%
(21.10.2015 klo 15:44) haaja
(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
(21.02.2016 klo 11:20) Jani Uusitalo
(27.02.2016 klo 00:20) olmari
(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%
(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: 6%

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%
(11.04.2017 klo 20:08) Bysmyyr
(12.04.2017 klo 20:29) Olotila
ikilinkki
sazius's gravatar image sazius vastasi
11.08.2017 klo 21:37
435, hyväksyttyjä vastauksia: 0%

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,886 kertaa

päivitetty: 11.08.2017 klo 21:37

Samankaltaiset kysymykset