Udzielamy pomocy Certyfikat SSL Wildcard - Certbot, Let's Encrypt, Docker

Discussion in 'Serwer WEB i aplikacje (PHP oraz bazy danych SQL)' started by GoRo33, Oct 17, 2018.

Loading...
  1. GoRo33
    Offline

    GoRo33 System Engineer Q Specialist

    Joined:
    Aug 24, 2016
    Messages:
    163
    Location:
    Szczecin
    Local Time:
    1:11 PM
    Ratings:
    +17 / 1 / -0
    Followers:
    2
    QNAP:
    TS-x53
    Ethernet:
    1 GbE
    TS-x53 1 GbE
    O co chodzi z tym szyfrowaniem??

    Posiadanie certyfikatu SSL do komunikacji z serwerem WWW, jest obecnie nie tyle przywilejem co koniecznością. W dobie dbania o prywatność przesyłanych danych giganty technologiczne takie jak google zamierzają utrudniać życie administratorom, których strony nie dbają o odpowiednie szyfrowanie komunikacji.
    Na szczęście dla nas istnieje ciekawe oraz proste rozwiązanie takiego problemu. Organizacja non profit jaką jest Internet Seciurity and Reaserch Group (ISRG) powołało do życia niezależny otwarty ośrodek certyfikacji, dzięki któremu możemy tworzyć certyfikaty dla naszych domen za darmo. Mowa jest oczywiście o certyfikatach wydawanych przez Let’s Encrypt.
    Certyfikaty Let’s Encrypt są powszechnie akceptowane przez najpopularniejsze przeglądarki internetowe dzięki czemu, jeśli poprawnie zainstalujemy certyfikat będzie pojawiać się nam popularna „kłódka” przy adresie naszej strony a przeglądarki nie będą krzyczeć o niebezpiecznym połączeniu. Wadą tego rozwiązania jest konieczność odnawiania certyfikatów co trzy miesiące, co implikuje często konieczność zastosowania odpowiedniego narzędzia po stronie serwera. Dodatkowo do niedawna, aby poprawnie wygenerować certyfikat należało podać nie tylko adres głównej domeny jaka do nas należy ale również podać wszystkie kombinacje nazw subdomen, jeśli chcieliśmy z nich korzystać np. „admin.myadress.com” lub „ftp.myadress.com”. Jednak od marca 2018 roku można generować tzw. Certyfikaty Wildcard, które umożliwiają poprawną komunikacja nie tylko z główną domeną, ale również z wszystkimi poddomenami – o ile z takich korzystamy.

    Certbot – dobry duch w walce o szyfrowanie sieci.

    Poza samą możliwością generowania certyfikatów dla naszych domen powstało jeszcze narzędzie ułatwiające pracę. Jest nim program o wdzięcznej nazwie CertBot. Czym jest CertBot? Może niech sam o sobie opowie:

    W skrócie CertBot jest to program, który pomoże nam wygenerować oraz w wielu przypadkach skonfigurować serwer WWW do poprawnej pracy z certyfikatami Let’s Encrypt.

    Docker – Kiedy kontener jest nam bardzo pomocny.

    Docker jest potężnym oraz bardzo przydatnym narzędziem, kiedy chcemy w bezpieczny sposób tworzyć i rozpowszechniać środowiska programistyczne. Bardzo często wykorzystuje się konteneryzację do tworzenia tzw. środowisk rozproszonych. Przy wykorzystaniu kontenerów możemy w wygodny sposób opracować narzędzia do pracy, które będą niezależne od systemu hosta oraz dadzą nam pewność korzystania z unifikowanych bibliotek. Do naszych potrzeb wykorzystamy gotowy kontener przygotowany do uruchomienia Certbot’a, wykonania kilku czynności oraz zakończenia pracy kontenera w wyniku czego dostaniemy gotowy certyfikat SSL. Kolejną zaletą wykorzystania kontenerów Docker’a jest pewność, że korzystamy z najnowszego oprogramowania. Niestety aktualnie rozwiązanie nie pozwala na automatyczną konfigurację serwera WWW. Ale coś za coś. Dostaniemy certyfikat Wildcard oraz możliwość łatwego odnawiania co kilka miesięcy.

    Konfiguracja środowiska

    Słowem wstępu.

    Zakładam, że tematy takie jak połączenie FAQ SSH oraz podstawowe komendy i polecenia powłoki Bash nie są Tobie obce. Wszystkie czynności będziemy wykonywać w terminalu połączeni przez FAQ SSH z naszym serwerem.

    Zwracam również uwagę, aby umieścić skrypt w odpowiednim folderze i miejscu na serwerze, ponieważ Qnap po restarcie czyści większość domyślnych katalogów systemowych. Można do tego celu wykorzystać aplikację Entwre-ng lub któryś z katalogów w naszym systemie plików.

    Dodatkowo przedstawiam rozwiązanie opierające się o domenę znajdującą się na serwerach OVH, ponieważ sam taką domenę posiadam. Spokojnie po drobnych modyfikacjach można wykorzystać tą metodę do wykorzystania innych hostingów. Lista dostępnych puginów do Certbota znajduje się poniżej:

    apreview.ibb.co_c6S8kf_Pluginy_Certbot.

    Każdy plugin obsługuje inny typ autoryzacji domeny oraz różne funkcjonalności – np. można bezproblemowo skonfigurować serwer Apache lub Nginx. Dla nas najważniejsza kategoria to tzw. DNS Plugins, przy pomocy których wykonamy testy dns domeny.

    apreview.ibb.co_nosKrL_DNS_Plugins.
    Jak widać pluginów DNS jest sporo dzięki czemu nie jesteśmy skazani tylko na hosting OVH.

    Skoro już wszystko wiemy, przystępujemy do pracy…

    W folderze, w którym będziemy trzymać skrypt należy stworzyć trzy katalogi:

    Code (Text):
    1. mkdir certs letsencrypt ovh
    Dalej przechodzimy do katalogu ovh, w którym tworzymy specjalny plik o nazwie ovhSecret.ini

    Code (Text):
    1. cd ovh && touch ovhSecret.ini
    sam plik edytujemy ulubionym edytorem I wklejamy poniższy kod:

    Code (Text):
    1. # OVH API credentials used by Certbot
    2. dns_ovh_endpoint = ovh-eu
    3. dns_ovh_application_key = MDAwMDAwMDAwMDAw
    4. dns_ovh_application_secret = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
    5. dns_ovh_consumer_key = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
    6.  
    Idąc dalej trzeba wejść pod ten adres (OVH Developers : Discover OVH products API & functions - OVH)i wygenerować token dostępowy do naszego konta. Dane z tokena przeklejamy w odpowiedni pola w pliku.

    Słowem wyjaśnienia. Certbot wykorzysta wygenerowany klucz, aby dostać się do serwerów DNS naszej strony utworzyć tam specjalną subdomenę oraz przechwycić ruch jaki zostanie na nią wysłany. Jeśli przekierowanie z subdomeny zostanie wykryte przez Certbota to będzie oznaczać, że strona należy do nas i można wygenerować dla niej certyfikat.


    W katalogu głównym należy stworzyć plik o nazwie „cert.sh” i wkleić do niego poniższy kod:

    Code (Text):
    1. #!/bin/bash
    2.  
    3. DOMAIN="**nazwa domeny**"
    4. EMAIL="**Adres Email**"
    5.  
    6. KONTAINER=certbot/dns-ovh
    7.  
    8. HOSTDIR=$(pwd)
    9.  
    10. CERTDIR="${HOSTDIR}/certs"
    11. LETSENCRYPTDIR="${HOSTDIR}/letsencrypt"
    12. OVHSECRET="${HOSTDIR}/ovh"
    13.  
    14. DOCKERENV="-it --rm --name certbot -v "$CERTDIR:/etc/letsencrypt" -v "$LETSENCRYPTDIR:/var/lib/letsencrypt" -v "$OVHSECRET:/ovh""
    15.  
    16. CREATE="certonly --agree-tos --email "$EMAIL" --server https://acme-v02.api.letsencrypt.org/directory --dns-ovh --dns-ovh-credentials /ovh/ovhSecret.ini -d $DOMAIN"
    17. TEST="renew --dry-run"
    18. RENEW="renew"
    19.  
    20. function help {
    21. echo " "
    22. echo "******** DESCRIPTION **********"
    23. echo "Script for Qnap server to create SSL cert in Docker kontainer.
    24. It is using certbot and LetsEncrypt wildcard certyficates over
    25. DNS OVH serwer validation."
    26. echo " "
    27. echo "******** USAGE **********"
    28. echo " No argument: Creates new certyfiacate."
    29. echo " test | TEST : It make validation of all available certyficates"
    30. echo " renew | RENEW : Renews certificates."
    31. echo " help | HELP : Print this help."
    32. echo ""
    33. echo "******** END ********"
    34. }
    35.  
    36. if [ $# == 0 ]
    37. then   
    38.     docker run $DOCKERENV $KONTAINER $CREATE
    39. elif [ $# == 1 ]
    40. then
    41.     case $1 in
    42.     test|TEST)
    43.         docker run $DOCKERENV $KONTAINER $TEST
    44.     ;;
    45.     renew|RENEW)
    46.        
    47.         docker run $DOCKERENV $KONTAINER $RENEW
    48.     ;;
    49.     help|HELP)
    50.         help
    51.     ;;
    52.     *)
    53.         echo "****UKNOW OPTION TRY HELP****"
    54.     ;;
    55.     esac
    56. else [ $# > 1 ]
    57.     echo "To meny arguments!! Try help"
    58. fi
    59.  
    60. exit 0
    61.  
    W skrypcie należy wypełnić dwa pola: DOMAIN oraz EMAIL wpisując odpowiednio nazwę naszej domeny poprzedzoną gwiazdką np.: „*.mojadomena.pl” oraz adres kontaktowy email, na który przyjdzie nam powiadomienie o zbliżającym się końcu ważności certyfikatu.

    Poniższemu skryptowi należy nadać uprawnienia do wykonywania:

    Code (Text):
    1. sudo chmod x+ ./cert.sh USER
    Gdzie USER to nazwa użytkownika.

    Jeśli wszystko wykonaliśmy dobrze do tej pory to można uruchomić skrypt i poczekać na pobranie oraz uruchomienie kontenera. Zobaczymy wtedy poniższy komunikat:

    aimage.ibb.co_jrJvy0_Certyfikat_SSL.

    Gotowy certyfikat znajduje się w pod ścieżką:

    Code (Text):
    1. ./certs/live
    Aby potwierdzić, że wszystko jest z certyfikatem OK, możemy przeprowadzić test wpisując w terminal:

    Code (Text):
    1. ./cert.sh test
    Po czym zobaczymy:

    aimage.ibb.co_mMEDkf_Test.

    Jeśli chcemy automatycznie odnawiać certyfikat należy dodać do Cron’a zadanie „./cert.sh renew” z częstotliwością uruchomienia raz w tygodniu. Częstotliwość ta jest wymagana, ponieważ mamy możliwość odnowienia certyfikatu na 10 dni przed jego wygaśnięciem, w związku z tym sprawdzając certyfikat raz w tygodniu na pewno trafimy w odpowiedni moment a zarazem nie będziemy zarzucać zapytaniami serwerów Let’s Encrypt.

    I to tyle. Jeśli wszystko dobrze wykonaliśmy to mamy dobry certyfikat Wildcard SSL a nam pozostało podpięcie go pod serwer WWW.

    Linki:

    Google: Chromium Blog: Next steps toward more connection security

    Certbot: Introduction — Certbot 0.26.0.dev0 documentation

    Kontener Cerbot: https://hub.docker.com/r/certbot/certbot/

    Tokeny OVH: https://eu.api.ovh.com/createToken/
     
    • Lubię to! Lubię to! x 1
  2. pigers
    Online

    pigers "Debbie" - always ask Silas ! Administrator

    Joined:
    Jul 26, 2013
    Messages:
    11,924
    Local Time:
    1:11 PM
    Ratings:
    +1,881 / 42 / -24
    Followers:
    8
    QNAP:
    TS-653D
    Ethernet:
    1 GbE
    TS-653D 1 GbE
    PROTIP: Jak piszesz posta/edytujesz (nie mówię o szybkiej edycji!) masz możliwość wklejenia obrazków - hostuje je wtedy silnik forum :)

    Sprawdzę na początku miesiąca, nie wygląda na mega skomplikowane.
     
  3. GoRo33
    Offline

    GoRo33 System Engineer Q Specialist

    Joined:
    Aug 24, 2016
    Messages:
    163
    Location:
    Szczecin
    Local Time:
    1:11 PM
    Ratings:
    +17 / 1 / -0
    Followers:
    2
    QNAP:
    TS-x53
    Ethernet:
    1 GbE
    TS-x53 1 GbE
    OK dzięki, nie wiedziałem. Nie jest to skomplikowane, dla OVH masz podane powyżej dla innych hostingów trzeba trochę zmodyfikować.
     
  4. Ciangi
    Offline

    Ciangi System Engineer Q Specialist

    Joined:
    Jan 24, 2016
    Messages:
    122
    Local Time:
    1:11 PM
    Ratings:
    +28 / 1 / -0
    Followers:
    0
    QNAP:
    TVS-ECxx80
    Ethernet:
    1 GbE
    TVS-ECxx80 1 GbE
    Dobry tutek, a ten no, masz może howto poprzez apache? bo w moim przypadku mam zarejestrowana domene w miejscu gdzie let's encrypt nie jest mile widziany i nie tworza zadnych tokenow….
     
  5. GoRo33
    Offline

    GoRo33 System Engineer Q Specialist

    Joined:
    Aug 24, 2016
    Messages:
    163
    Location:
    Szczecin
    Local Time:
    1:11 PM
    Ratings:
    +17 / 1 / -0
    Followers:
    2
    QNAP:
    TS-x53
    Ethernet:
    1 GbE
    TS-x53 1 GbE
    Tylko test po DNS'sie pozwala na stworzenie certyfikat wildcard. Możesz skorzystać z pluginu "apache" i wygenerować certyfikat dla ręcznie wypisanych subdomen przełącznik "-d".
     
  6. pigers
    Online

    pigers "Debbie" - always ask Silas ! Administrator

    Joined:
    Jul 26, 2013
    Messages:
    11,924
    Local Time:
    1:11 PM
    Ratings:
    +1,881 / 42 / -24
    Followers:
    8
    QNAP:
    TS-653D
    Ethernet:
    1 GbE
    TS-653D 1 GbE
    akurat domeny mam w ovh więc mam z górki :D
     
  7. Ciangi
    Offline

    Ciangi System Engineer Q Specialist

    Joined:
    Jan 24, 2016
    Messages:
    122
    Local Time:
    1:11 PM
    Ratings:
    +28 / 1 / -0
    Followers:
    0
    QNAP:
    TVS-ECxx80
    Ethernet:
    1 GbE
    TVS-ECxx80 1 GbE
    Neilpang/acme.sh

    Tutaj tylko ślad taki zostawie… Znalazłem projekcik dość ciekawy, jakby ktoś miał jak ja Namecheapa i szukal automatyzacji...
     
  8. piciuok
    Offline

    piciuok Passing Basics Beginner

    Joined:
    Apr 7, 2021
    Messages:
    2
    Local Time:
    1:11 PM
    Ratings:
    +0 / 0 / -0
    Followers:
    0
    QNAP:
    TS-x53D
    Ethernet:
    1 GbE
    TS-x53D 1 GbE
    dzięki wielkie - skonfigurowałem pod cloudflare i wszystko pięknie działa

    pytanie - czy po restarcie qnapa wpis w crontabie zostanie usunięty?
     
  9. pigers
    Online

    pigers "Debbie" - always ask Silas ! Administrator

    Joined:
    Jul 26, 2013
    Messages:
    11,924
    Local Time:
    1:11 PM
    Ratings:
    +1,881 / 42 / -24
    Followers:
    8
    QNAP:
    TS-653D
    Ethernet:
    1 GbE
    TS-653D 1 GbE
    zwykle przeżywa restart/zmiane FW :)
     
    • Lubię to! Lubię to! x 1
  10. grzenio
    Offline

    grzenio Staff Contributor

    Joined:
    Sep 6, 2012
    Messages:
    526
    Local Time:
    1:11 PM
    Ratings:
    +90 / 4 / -1
    Followers:
    5
    QNAP:
    TVS-x72
    Ethernet:
    802.11ac
    TVS-x72 802.11ac
    Hmmm spoko robota ale nie wygodniej stosować gotowe acme.sh?
     
    • Zgadzam się! Zgadzam się! x 1

Users found this page by searching for:

  1. qnap letscrypt wildcard

    ,
  2. https://forum.qnap.net.pl/threads/certyfikat-ssl-wildcard-certbot-lets-encrypt-docker.24541/

    ,
  3. qnap lets encrypt