|
Rozmiar: 4445
Komentarz: *** KREACJA ***
|
← Wersja 10 z 2016-10-15 00:44:00 ⇥
Rozmiar: 6610
Komentarz: + katalog na certyfikaty zapasowe
|
| Usunięcia zostały oznaczone w ten sposób. | Dodatki zostały oznaczone w ten sposób. |
| Linia 4: | Linia 4: |
| <<TableOfContents()>><<BR>> | <<TableOfContents()>> |
| Linia 14: | Linia 14: |
| pw add user acmele -s /bin/sh -d /home/acmele -m -C "ACME Let's Encrypt" -g bin | pw add user acmele -s /bin/tcsh -d /home/acmele -m -c "ACME Let's Encrypt" -g bin |
| Linia 17: | Linia 17: |
| === Pobranie skryptu === | === Przygotowanie konta acmele === |
| Linia 20: | Linia 20: |
| wget -O - https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py > acme_tiny.py | mkdir bin/ certs/ challenges/ spare-certs/ cp -p /root/.cshrc . source .cshrc rehash |
| Linia 22: | Linia 26: |
=== (arche) Pobranie skryptu === (!) Skrypt [[FreshPorts:security/py-acme-tiny|acme_tiny]] jest już w ports. Tak więc poniższe historycznie. {{{#!shell numbers=off # do pominiecia - acme_tiny jest juz w ports wget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py -O bin/acme_tiny.py chmod +x bin/acme_tiny.py # (do sprawdzenia uruchomienie python w skrypcie) }}} === Instalacja acme_tiny === Z wykorzystaniem własnego [[PoudriereBinaryPkg|repozytorium skryptów]] instalujemy skrypt pomocniczy: {{{#!shell numbers=off pkg install -y security/py-acme-tiny }}} |
|
| Linia 65: | Linia 87: |
| dd if=/dev/urandom of=acmele.rand count=1 2>/dev/null | dd if=/dev/urandom of=~/acmele.rand count=1 2>/dev/null |
| Linia 68: | Linia 90: |
| /usr/local/bin/openssl gendh -rand acmele.rand -out www.bsdserwis.com.2048.dh.pem 2048 | /usr/local/bin/openssl gendh -rand acmele.rand -out ~/certs/www.bsdserwis.com.2048.dh.pem 2048 |
| Linia 71: | Linia 93: |
| /usr/local/bin/openssl genrsa -out www.bsdserwis.com.key 2048 | /usr/local/bin/openssl genrsa -out ~/certs/www.bsdserwis.com.key 2048 |
| Linia 74: | Linia 96: |
| /usr/local/bin/openssl req -new -key www.bsdserwis.com.key -out www.bsdserwis.com.csr -config openssl.cnf | /usr/local/bin/openssl req -new -key ~/certs/www.bsdserwis.com.key -out ~/certs/www.bsdserwis.com.csr -config openssl.cnf |
| Linia 80: | Linia 102: |
| /usr/local/bin/openssl req -in scotthelme.csr -noout -text | /usr/local/bin/openssl req -in certs/www.bsdserwis.com.csr -noout -text }}} == Konfiguracja serwera www w celu udostępnienia katalogu challenges/ == W konfiguracji serwera www konieczne jest dodanie następującej lokalizacji (chyba globalnie, aby nie ruszać poszczególnych wirtualek): {{{ # definicja katalogu ze stronami <Directory /home/acmele/challenges> Options Indexes Order allow,deny Allow from all </Directory> # alias dla witryn <IfModule mod_alias.c> Alias /.well-known/acme-challenge/ /home/acmele/challenges/ </IfModule> }}} A następnie przeładowanie konfiguracji serwera www: {{{#!shell numbers=off service apache22 reload |
| Linia 86: | Linia 129: |
| python acme_tiny.py --account-key account.key --csr www.bsdserwis.com.csr --acme-dir ~/ > ~/www.bsdserwis.com.signed.crt | acme_tiny.py --account-key account.key --csr certs/www.bsdserwis.com.csr --acme-dir ~/challenges > ~/certs/www.bsdserwis.com.signed.crt |
| Linia 94: | Linia 137: |
| ==== Instalacja w /etc/ssl ==== (!) W trakcie użytkowania (ponownej certyfikacji po 3 miesiącach) okazało się, że nowy certyfikat został podpisany przez nowy certyfikat pośredni [[https://letsencrypt.org/howitworks/|Let's Encrypt|target="_blank"]]. W związku z tym należy sprawdzić nowo wystawiony certyfikat i pobrać stosowny certyfikat pośredni oraz dograć do katalogu `SSLCACertificatePath` (domyślnie `/etc/ssl`): {{{#!shell numbers=off wget -O - https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem > /etc/ssl/ca.letsencrypt.x1.pem wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > /etc/ssl/ca.letsencrypt.x3.pem c_rehash /etc/ssl }}} |
|
| Linia 95: | Linia 147: |
| Poniższe działa poprawnie dla [[FreshPorts:www/nginx|www/nginx]] oraz [[FreshPorts:www/apache24|www/apache24]]. W przypadku [[FreshPorts:www/apache22|www/apache22]] certyfikat pośredni należy zapisać w katalogu `SSLCACertificatePath`: | |
| Linia 96: | Linia 149: |
| cat www.bsdserwis.com.signed.crt intermediate.pem > www.bsdserwis.com.chained.pem | cat certs/www.bsdserwis.com.signed.crt intermediate.pem > certs/www.bsdserwis.com.chained.pem |
| Linia 115: | Linia 168: |
| * [[https://securityheaders.io/|Security headers|target="_blank"]] |
Spis Treści
- Wykorzystanie certyfikatów Let's Encrypt do serwera www
- Automat do odświeżania certyfikatu
- Źródła w sieci internet
Wykorzystanie certyfikatów Let's Encrypt do serwera www
Za pomocą Let's Encrypt możliwe jest uzyskanie darmowego certyfikatu do własnych witryn webowych. Poniższe kroki pozwalają na automatyzację tych kroków w celu pełnej automatyzacji odświeżania certyfikatów.
Wykorzystanie skryptu acme-tiny
Sam projekt Let's Encrypt udostępnia klienta do generowania certyfikatów (tak naprawdę pary klucz+csr), ale w celu lepszego zabezpieczenia nagłówków serwera warto mieć klucz stały. Dlatego też korzystamy ze skryptu acme-tiny.
Utworzenie dedykowanego użytkownika do zarządzania certyfikatami
pw add user acmele -s /bin/tcsh -d /home/acmele -m -c "ACME Let's Encrypt" -g bin
Przygotowanie konta acmele
su - acmele
mkdir bin/ certs/ challenges/ spare-certs/
cp -p /root/.cshrc .
source .cshrc
rehash
(arche) Pobranie skryptu
Skrypt acme_tiny jest już w ports. Tak więc poniższe historycznie.
# do pominiecia - acme_tiny jest juz w ports
wget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py -O bin/acme_tiny.py
chmod +x bin/acme_tiny.py
# (do sprawdzenia uruchomienie python w skrypcie)
Instalacja acme_tiny
Z wykorzystaniem własnego repozytorium skryptów instalujemy skrypt pomocniczy:
pkg install -y security/py-acme-tiny
Utworzenie klucza do połączeń do Let's Encrypt
Zamiast loginu oraz hasła użytkownik będzie pobierał certyfikat z Let's Encrypt z wykorzystaniem klucza:
/usr/local/bin/openssl genrsa 4096 > account.key
openssl.conf
W celu poprawnego generowania klucza oraz CSR warto mieć własny plik konfiguracyjny dla openssl. Można wykorzystać konfigurację z repozytorium skryptów administracyjnych:
cp /usr/local/etc/ssl/openssl.cnf ~/
Zaś w kolejnym kroku trzeba dodać następujące sekcje do konfiguracji (na przykładzie domeny bsdserwis.com)
# sekcja [req] req_extensions = v3_req
# sekcja [v3_req] subjectAltName = @alt_names
I podajemy wszystkie nazwy dla naszej domeny
[ alt_names ] DNS.1 = www.bsdserwis.com DNS.2 = bsdserwis.com DNS.3 = www.bsdserwis.org DNS.4 = bsdserwis.org DNS.5 = www.codenix.pl DNS.6 = codenix.pl DNS.7 = www.codenix.pl DNS.8 = www.codenix.pro DNS.9 = codenix.pro
Wygenerowanie klucza oraz csr
Wzorując się na pliku Makefile z repozytorium skryptów administracyjnych generujemy klucz oraz CSR:
# utworzenie pliku z losowym ziarnem
dd if=/dev/urandom of=~/acmele.rand count=1 2>/dev/null
# utworzenie pliku DH
/usr/local/bin/openssl gendh -rand acmele.rand -out ~/certs/www.bsdserwis.com.2048.dh.pem 2048
# utworzenie klucza dla serwera
/usr/local/bin/openssl genrsa -out ~/certs/www.bsdserwis.com.key 2048
# wygenerowanie CSR dla witryny
/usr/local/bin/openssl req -new -key ~/certs/www.bsdserwis.com.key -out ~/certs/www.bsdserwis.com.csr -config openssl.cnf
Weryfikacja CSR
W celu potwierdzenia, że są pokazane wszystkie nazwy wpisane do konfiguracji openssl:
/usr/local/bin/openssl req -in certs/www.bsdserwis.com.csr -noout -text
Konfiguracja serwera www w celu udostępnienia katalogu challenges/
W konfiguracji serwera www konieczne jest dodanie następującej lokalizacji (chyba globalnie, aby nie ruszać poszczególnych wirtualek):
# definicja katalogu ze stronami
<Directory /home/acmele/challenges>
Options Indexes
Order allow,deny
Allow from all
</Directory>
# alias dla witryn
<IfModule mod_alias.c>
Alias /.well-known/acme-challenge/ /home/acmele/challenges/
</IfModule>A następnie przeładowanie konfiguracji serwera www:
service apache22 reload
Wygnerowanie certyfikatu
Mając już wszystko gotowe można generować certyfikat:
acme_tiny.py --account-key account.key --csr certs/www.bsdserwis.com.csr --acme-dir ~/challenges > ~/certs/www.bsdserwis.com.signed.crt
Pobranie certyfikatu pośredniego
wget -O - https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem > intermediate.pem
Instalacja w /etc/ssl
W trakcie użytkowania (ponownej certyfikacji po 3 miesiącach) okazało się, że nowy certyfikat został podpisany przez nowy certyfikat pośredni Let's Encrypt. W związku z tym należy sprawdzić nowo wystawiony certyfikat i pobrać stosowny certyfikat pośredni oraz dograć do katalogu SSLCACertificatePath (domyślnie /etc/ssl):
wget -O - https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem > /etc/ssl/ca.letsencrypt.x1.pem
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > /etc/ssl/ca.letsencrypt.x3.pem
c_rehash /etc/ssl
Utworzenie certyfikatu docelowego
Poniższe działa poprawnie dla www/nginx oraz www/apache24. W przypadku www/apache22 certyfikat pośredni należy zapisać w katalogu SSLCACertificatePath:
cat certs/www.bsdserwis.com.signed.crt intermediate.pem > certs/www.bsdserwis.com.chained.pem
Automat do odświeżania certyfikatu
Można użyć następującego skryptu:
#!/bin/sh
python acme_tiny.py --account-key account.key --csr www.bsdserwis.com.csr --acme-dir ~/ > ~/www.bsdserwis.com.signed.crt || exit
cat www.bsdserwis.com.signed.crt intermediate.pem > www.bsdserwis.com.chained.pem
echo "Przegraj nowy certyfikat i zrób restart serwera www (apache|nginx)"
Źródła w sieci internet
(c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.
