Let’s Encrypt certifikát na Windows Apache serveru

Pro SSL certifikát zdarma od Let’s Encrypt existuje oficiální nástroj pro jeho jednoduché vygenerování a nastavení. Ovšem pouze pro Linux.

Ti, co mají Windows si tedy musí poradit jinou cestou. A jelikož se nikomu nechce nastavovat složitě konfigurační soubory, posílat požadavky pro vygenerování certifikátu, stahování souborů certifikační autority a mnoho dalšího, je zde určitá cesta.

Z GitHubu si stáhněte nejnovější verzi konzolového prográmku lets-encrypt-win-simple v1.9.1 (záloha, pokud by link nefungoval zde). Soubor .zip rozbalte do nějakého umístění, kde máte zaručeno, že bude moci jakýkoliv uživatel zapisovat. Buďto tedy rozbalte soubor například do C:\letsencrypt-win-simple, nebo v dalším kroku spusťte aplikaci jako administrátor (správce).

Předpokládejme tedy, že všechny rozbalené soubory se nacházejí ve složce C:\letsencrypt-win-simple. Otevřete si cmd, doporučuji ho spustit jako správce (levý klik na cmd > Spustit jako správce). Můžete ho také vyvolat klávesovou zkratkou Win + R > cmd > zakliknout „Spustit jako správce“.

 

Zadejte příkaz:

cd C:\letsencrypt-win-simple

Tím se s celým CMD „přesunete“ do složky našeho rozbaleného prográmku. Nyní zadejte příkaz pro spuštění aplikace letsencrypt.exe. Zároveň jí pošleme pošleme pár parametrů:

letsencrypt.exe --manualhost <doména> --webroot <složka-s-daty-domény> --test
  1. letsencrypt.exe [tímto dáváme CMD příkaz, aby nadále pracoval s aplikací letsencrypt.exe]
  2. –manualhost [definujeme, že chceme zadávat příkazy manuálně]
  3. <doména> [zaměňte za opravdový název Vaší domény, pro kterou chcete vygenerovat certifikát]
  4. –webroot [definujeme, že další uváděný údaj bude cesta k rootu domény]
  5. <složka-s-daty-domény> [zaměňte za absolutní cestu (bez uvozovek) k root adresáři se soubory Vaší domény]
  6. –test [přidáváme identifikátor –test, pro případ, kdyby se něco nezdařilo, aby se něco nepokazilo na serveru]

 

Váš příkaz by měl vypadat nějak takto:

letsencrypt.exe --manualhost www.mujskript.cz --webroot "C:\xampp\htdocs\mujskript.cz" --test

Stiskněte Enter a odešlete. Mělo by se Vám otevřít nové okno CMD, které bude mít v záhlaví adresu umístění Vašeho letsencrypt.exe souboru. Program začne odesílat požadavky na server letsencrypt pro vygenerování certifikátu.

Pokud se začne vypisovat do konzole něco podobné tomuto:

Authorizing Identifier <doména> Using Challenge Type http-01
 Writing challenge answer to <složka-s-daty-domény>\.well-known/acme-challenge/<challenge-text>
 Answer should now be browsable at <document-root>/.well-known/acme-challenge/<challenge-text>
 Submitting answer
 Refreshing authorization
 Authorization Result: valid

Requesting Certificate
 Request Status: Created
 Saving Certificate to C:\Users\<uživatel>\AppData\Roaming\letsencrypt-win-simple\httpsacme-stage.api.letsencrypt.org\<doména>-crt.der
 Saving Issuer Certificate to C:\Users\<uživatel>\AppData\Roaming\letsencrypt-win-simple\httpsacme-stage.api.letsencrypt.org\ca-<unikátní-id>-crt.pem
 Saving Certificate to C:\Users\<uživatel>\AppData\Roaming\letsencrypt-win-simple\httpsacme-stage.api.letsencrypt.org\<doména>-all.pfx

(Do hranatých závorek jsem uvedl proměnné, které se budou lišit v závislosti na konfiguraci Vašeho serveru.)

Tak byste ve složce

C:\Users\<uživatel>\AppData\Roaming\letsencrypt-win-simple\httpsacme-stage.api.letsencrypt.org

měli najít nově vygenerované certifikáty, v jejichž názvu bude název domény pro kterou byly vystaveny. Pokud byste je tam nenašli, přidejte do Vaší httpd.conf konfigurace k Vašemu názvu u VirtualHost (viz. níže) domény alias pro přístup do složky, kde se ověřuje pravost domény:

Alias /.well-known <domain-root>/.well-known

Takže by to mělo vypadat nějak takto (cestu lze uvést i bez uvozovek, ale dejte pozor, aby cesta neobsahovala mezery)

Alias /.well-known "C:/xampp/htdocs/mujskript.cz/.well-known"

A znovu spusťte proces ověření přes CMD. Pokud se povede, spusťte jej ještě bez přídomku –test.

Program by se Vás dále měl zeptat na to, jestli chcete certifikáty obnovovat ručně, nebo automaticky. Odpovídáte ano/ne klávesami y/n. Nutno podotknout 2 věcí a to

  • pokud odpovíte ne, program se ukončí
  • pokud pošlete příliš požadavků pro jednu doménu na servery Let’s Encrypt, další generování se samo ukončí a již Vás dále nepustí.

 

Poté, co již ve Výše zmíněné složce naleznete vygenerované soubory, otevřete si soubor httpd-vhosts.conf (samozřejmě můžete i soubor httpd.conf) a měli byste v něm najít informaci o nezabezpečeném HTTP spojení:

<VirtualHost *:80>
 #Definujeme základní proměnné
 ServerAdmin email@administratora
 ServerName mujskript.cz
 ServerAlias www.mujskript.cz

 #Tady jste vložili alias, pokud Vám nefungovalo ověření
 Alias /.well-known "C:/xampp/htdocs/mujskript.cz/.well-known"

 RewriteEngine On
 #Nastavíme přesměrování z HTTP verze na HTTPS verzi
 RewriteCond %{HTTPS} off
 RewriteRule ^/?(.*)$ https://mujskript.cz/$1 [NE,L,R=301]
</VirtualHost>

(Pokud tam výše uvedený kus kódu nemáte, vložte jej kvůli přesměrování (může být i v jiných .conf souborech). Je to na Vás, ale vložení není povinné, protože následné přesměrování nemusíte řešit .conf souborem, ale .htaccess souborem v rootu domény.)

Následně přidejte ještě povinný kód pro SSL (HTTPS) komunikaci:

<VirtualHost *:443>
 #Definujeme základní proměnné
 ServerAdmin email@administratora
 ServerName mujskript.cz
 ServerAlias www.mujskript.cz
 RewriteEngine On 
 
 #Tady jste vložili alias, pokud Vám nefungovalo ověření
 Alias /.well-known "C:/xampp/htdocs/mujskript.cz/.well-known"

 #Nastavíme přesměrování z HTTP verze na HTTPS verzi
 RewriteCond %{HTTP_HOST} !^mujskript.cz$ [NC] 
 RewriteRule ^/?(.*)$ https://mujskript.cz/$1 [NE,L,R=301]
 

 SSLEngine on 
 SSLCertificateFile "C:/Users/<uživatel>/AppData/Roaming/letsencrypt-win-simple/httpsacme-v01.api.letsencrypt.org/<doména>-crt.pem" 
 SSLCertificateKeyFile "C:/Users/<uživatel>/AppData/Roaming/letsencrypt-win-simple/httpsacme-v01.api.letsencrypt.org/<doména>-key.pem" 
 SSLCertificateChainFile "C:/Users/<uživatel>/AppData/Roaming/letsencrypt-win-simple/httpsacme-v01.api.letsencrypt.org/ca-<unikátní-id>-crt.pem" 
</VirtualHost>

Zdě si všimněte, že již neuvádíme port 80 pro nezabezpečenou HTTP komunikaci, ale port 443 pro zabezpečenou HTTPS komunikaci.

Zbytek kódu jsme akorát opsali z předchozí 80 portové definice až na to, že jsme ještě přidali SSLEngine, jenž jsme zapnuli. A pod ním jsme nadefinovali jednotlivé cesty k jednotlivým certifikátům (absolutní cesty v uvozovkách).

Pokud Vám předtím nefungovalo automatické vygenerování certifikátů, opět i u portu 443 uveďte alias pro .well-know složku.

V příštím článku si ukážeme, jak nastavit soubor .htaccess pro automatické přesměrování na HTTPS variantu a naopak.

Nyní už stačí jen restartovat Apache a vše by mělo běžet. 🙂

Napište komentář!