V tomto článku se naučíme nakonfigurovat web server httpd. Instalace softwarového balíčku se nemusí provádět, protože web server httpd je součástí operačního systému.
K tomu, abychom moohli provozovat web server potřebujeme:
-
veřejnou IP adresu ,to může být problém na IPv4, na IPv6 nikoliv. Budeme používat IPv6.
-
A nebo AAAA záznam v nějaké doméně (my to budeme dělat v doméně
jr.lixis.cza AAAA záznamy jsem vám udělal). -
stroj, který poběží nepřetržitě (to budou vaše virtuální stroje, které máte hotové).
Nejprve nakonfigurujeme jednoduchý web server pro nešiftovaný protokol http, potom si vystavíme certifikát pro tento web a necháme si ho podepsat certifikační autoritou (protokol acme) a nakonec spustíme plně šifrovaný web, který bude fungovat na protokolu https.
Veškerá data (i programy) , která chceme poskytovat okolnímu světu pomocí http nebo https jsou v adresáři /var/www.
Pro process httpd je tento adresář kořenový, to znamená, že httpd nevidí celý systém, ale je uzavřen v tzv. chrootu, v kleci, ze které nemůže vyskočit.
To je důležitý bezpečnostní prvek, který zabezpečuje, že i v případě, kdy útočník nějakým způsobem zlomí web, tak se nedostane k celému systému a nemůže ho poškodit.
Je dobré vědět, že na jedné IP adrese se může provozovat více nezávislých webů současně. To je důsledek nedostatku IPv4 adres. U protokolu IPv6 nedostatek vůbec nehrozí a nepoužívá se to.
|
Po každé změně konfigurace musíme restartovat web server příkazem Chyby v konfiguraci můžeme zjistit |
Konfigurace web serveru
Konfigurace web serveru se nachází v textovém souboru /etc/httpd.conf.
1. Nejjednodušší konfigurace httpd serveru (jenom protokol http):
server "obsd46.jr.lixis.cz" {
listen on * port 80
root "/htdocs"
}
2. Konfigurace serveru připravená pro získání certifikátu od certifikační autority Let’s Encrypt.
server "obsd46.jr.lixis.cz" {
listen on * port 80
root "/htdocs"
location "/.well-known/acme-challenge/*" {
root "/acme"
request strip 2
}
}
3. Konfigurace httpd serveru pro protokoly http i https (máme podepsaný certifikát).
server "obsd46.jr.lixis.cz" {
listen on * port 80
location "/.well-known/acme-challenge/*" {
root "/acme"
request strip 2
}
location * {
block return 302 "https://$HTTP_HOST$REQUEST_URI"
}
}
server "obsd46.jr.lixis.cz" {
listen on * tls port 443
tls {
certificate "/etc/ssl/obsd46.jr.lixis.cz.fullchain.pem"
key "/etc/ssl/private/obsd46.jr.lixis.cz.key"
}
location "/*" {
directory auto index
}
}
|
V souboru |
Získání certifikátu
Pro získání certifikátu musíme nakonfigurovat službu acme-client.
authority letsencrypt {
api url "https://acme-v02.api.letsencrypt.org/directory"
account key "/etc/acme/letsencrypt-privkey.pem"
}
authority letsencrypt-staging {
api url "https://acme-staging.api.letsencrypt.org/directory"
account key "/etc/acme/letsencrypt-staging-privkey.pem"
}
domain obsd46.jr.lixis.cz { (1)
domain key "/etc/ssl/private/obsd46.jr.lixis.cz.key" (2)
domain certificate "/etc/ssl/obsd46.jr.lixis.cz.crt" (3)
domain full chain certificate "/etc/ssl/obsd46.jr.lixis.cz.fullchain.pem" (4)
sign with letsencrypt
}
| 1 | Jméno našeho webu |
| 2 | Kde bude uložen privátní klíč. |
| 3 | Kde bude uložen certifikát. |
| 4 | Kde bude uložen certifikát včetně řetězce certifikátů podepisujících certifikačních autorit. |
|
Příklad konfiguračního souboru pro acme-client najdete v |
obsd46# acme-client -v obsd46.jr.lixis.cz
obsd46# acme-client -v obsd46.jr.lixis.cz
acme-client: /etc/acme/letsencrypt-privkey.pem: generated RSA account key
acme-client: /etc/ssl/private/obsd46.jr.lixis.cz.key: generated RSA domain key
acme-client: https://acme-v02.api.letsencrypt.org/directory: directories
acme-client: acme-v02.api.letsencrypt.org: DNS: 172.65.32.248
acme-client: acme-v02.api.letsencrypt.org: DNS: 2606:4700:60:0:f53d:5624:85c7:3a2c
account key: https://acme-v02.api.letsencrypt.org/acme/acct/3043331266
acme-client: account key: https://acme-v02.api.letsencrypt.org/acme/acct/3043331266
acme-client: dochngreq: https://acme-v02.api.letsencrypt.org/acme/authz/3043331266/655575836036
acme-client: challenge, token: k7YoUzb7f-54w6Muh65mNtw1kCBBzMr80Nt1jIEOH_E, uri: https://acme-v02.api.letsencrypt.org/acme/chall/3043331266/655575836036/eHfapQ, status: 0
acme-client: /var/www/acme/k7YoUzb7f-54w6Muh65mNtw1kCBBzMr80Nt1jIEOH_E: created
acme-client: https://acme-v02.api.letsencrypt.org/acme/chall/3043331266/655575836036/eHfapQ: challenge
acme-client: order.status 0
acme-client: dochngreq: https://acme-v02.api.letsencrypt.org/acme/authz/3043331266/655575836036
acme-client: challenge, token: k7YoUzb7f-54w6Muh65mNtw1kCBBzMr80Nt1jIEOH_E, uri: https://acme-v02.api.letsencrypt.org/acme/chall/3043331266/655575836036/eHfapQ, status: -1
acme-client: order.status -1
acme-client: dochngreq: https://acme-v02.api.letsencrypt.org/acme/authz/3043331266/655575836036
acme-client: 2a12:b7c0:3:110::fa46: Invalid response from http://obsd46.jr.lixis.cz/.well-known/acme-challenge/k7YoUzb7f-54w6Muh65mNtw1kCBBzMr80Nt1jIEOH_E: 404 (1)
acme-client: bad exit: netproc(11197): 1
obsd46#
| 1 | chybový kód 404 web serveru znamená, že požadovaná web stránka neexistuje. |
Problém je v tom, že mi zcela určitě neběží httpd se správnou konfigurací.
Musím to napravit a nalézt chybu.
obsd46# acme-client -v obsd46.jr.lixis.cz
acme-client: https://acme-v02.api.letsencrypt.org/directory: directories
acme-client: acme-v02.api.letsencrypt.org: DNS: 172.65.32.248
acme-client: acme-v02.api.letsencrypt.org: DNS: 2606:4700:60:0:f53d:5624:85c7:3a2c
acme-client: account key: https://acme-v02.api.letsencrypt.org/acme/acct/3043331266
acme-client: dochngreq: https://acme-v02.api.letsencrypt.org/acme/authz/3043331266/655583136196
acme-client: challenge, token: frN_iaOak8whMqX0z1jph9PTukgeTa3BRhTeeGNUvmE, uri: https://acme-v02.api.letsencrypt.org/acme/chall/3043331266/655583136196/8madQg, status: 0
acme-client: /var/www/acme/frN_iaOak8whMqX0z1jph9PTukgeTa3BRhTeeGNUvmE: created
acme-client: https://acme-v02.api.letsencrypt.org/acme/chall/3043331266/655583136196/8madQg: challenge
acme-client: order.status 0
acme-client: dochngreq: https://acme-v02.api.letsencrypt.org/acme/authz/3043331266/655583136196
acme-client: challenge, token: frN_iaOak8whMqX0z1jph9PTukgeTa3BRhTeeGNUvmE, uri: https://acme-v02.api.letsencrypt.org/acme/chall/3043331266/655583136196/8madQg, status: 2
acme-client: order.status 1
acme-client: https://acme-v02.api.letsencrypt.org/acme/finalize/3043331266/478129223796: certificate
acme-client: order.status 3
acme-client: https://acme-v02.api.letsencrypt.org/acme/cert/0695d0aedca74d9b123fd6ad13ad87837995: certificate
acme-client: /etc/ssl/obsd46.jr.lixis.cz.crt: created
acme-client: /etc/ssl/obsd46.jr.lixis.cz.fullchain.pem: created
obsd46#
Chyba v konfiguraci byla ta, že jsem ve slově challenge "/.well-known/acme-challenge/" napsal jedno l (špatně to bylo tak: "/.well-known/acme-chalenge/")
|
Pokud se vám nebude dařit získat podepsaný certifikát, je chyba vždy ve špatné konfiguraci |
|
Pokud nechcete psát konfigurační soubory
|
Funkční web server
Potom, co se podařilo získat podepsaný certifikát, upravíme konfiguraci do finální verze:
server "obsd46.jr.lixis.cz" {
listen on * port 80
location "/.well-known/acme-challenge/*" {
root "/acme"
request strip 2
}
location * {
block return 302 "https://$HTTP_HOST$REQUEST_URI" (1)
}
}
server "obsd46.jr.lixis.cz" {
listen on * tls port 443
tls {
certificate "/etc/ssl/obsd46.jr.lixis.cz.fullchain.pem" (2)
key "/etc/ssl/private/obsd46.jr.lixis.cz.key"
}
location "/*" {
directory auto index
}
}
| 1 | Toto nám umožní automatické přesměrování z http protokolu na https protokol. |
| 2 | Je dobré dávat do řádku certificate plný řetěz certifikátů obsd46.jr.lixis.cz.fullchain.pem místo obsd46.jr.lixis.cz.crt. Prohlížečům to usnadňuje vyřešit otázku, kdo certifikát vydal. |
S touto jednoduchou konfigurací se dá překvapivě dosáhnout velmi dobrých výsledků (A) při testu zabezpečení serveru u Qualys SSL Labs: https://www.ssllabs.com/ssltest/analyze.html?d=obsd46.jr.lixis.cz
Zdroje a odkazy
man httpd.conf (1)
man acme-client (2)
| 1 | Manuál pro konfigurační soubor web serveru. |
| 2 | Manuálová stránka pro acme-client. |
/etc/examples/acme-client.conf
/etc/examples/httpd.conf
https://www.ssllabs.com/ssltest/analyze.html?d=obsd46.jr.lixis.cz
https://www.sslshopper.com/ssl-checker.html#hostname=obsd46.jr.lixis.cz