Różnice pomiędzy wersjami 1 i 8 (Spinanie 7 wersji)
⇤ ← Wersja 1 z 2016-01-05 14:27:01 →
Rozmiar: 4445
Edytor: wtps0n
Komentarz: *** KREACJA ***
← Wersja 8 z 2016-03-11 18:51:08 → ⇥
Rozmiar: 5897
Edytor: wtps0n
Komentarz: + aktualizacja: acme_tiny jest w ports
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/

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 95: Linia 138:
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 140:
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 159:
 * [[https://securityheaders.io/|Security headers|target="_blank"]]

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/

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

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


{i}  (c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.

LetsEncrypt (ostatnio edytowane 2016-10-15 00:44:00 przez wtps0n)