Let's Encrypt - Wildcard dla domen w OVH

Łukasz Piotrowski Komentarzy 0

    Ostatnimi czasy Let's encrypt wprowadził do swojej oferty darmowe certyfikaty typu Wildcard. Jest to bardzo duże ułatwienie dla osób które posiadają wiele subdomen i nie chcą generować dla każdej z nich oddzielnego certyfikatu.


    Czym jest Wildard

    Wildcart to najprościej mówiąc certyfikat który działa dla domeny example.com a także dla wszystkich subdomen czyli *.example.com.

    Dzięki takiemu rozwiązaniu możemy mieć 1 certyfikat i używać go dla wszystkich swoich subdomen.

    Wymagania

    Aby uzyskać nowy typ certyfikatu będziemy potrzebowali przede wszystkim certbot >= v2.22.0. Dodatkowo przyda się npm

    Dodatkowo chcemy uzyskać taki certyfikat dla OVH więc potrzebujemy jeszcze dodatkowego pluginu np: certbot-dns-ovh i to na nim będę opierał wpis.

    Przygotowania

    Instalacja Certbot

    Wpierw instalujemy certbot odpowiednio dla naszego systemu. U mnie był to Ubuntu 16.04:

    $ sudo apt-get update
    $ sudo apt-get install software-properties-common
    $ sudo add-apt-repository ppa:certbot/certbot
    $ sudo apt-get update
    $ sudo apt-get install certbot

    Dla innych systemów możecie znaleźć instrukcje tutaj: https://certbot.eff.org

    Instalacja Certbot OVH Plugin

    Żeby autoryzować nasze domeny będziemy potrzebowali dodatkowego pluginu:

    cd /opt
    git clone https://github.com/mcdado/certbot-dns-ovh.git
    cd certbot-dns-ovh
    npm install

    Konfiguracja dla OVH

    Wpierw musimy uzyskać niezbędne dane aby móc się podpiąć po API do OVH i wykonać niezbędne operacje.

    1. Wchodzimy najpierw do https://eu.api.ovh.com/createApp/ i wypełniamy tam wszystkie pola.

      Account ID or email address oraz Password to są nasze dane logowania do panelu OVH

      Application name to tak na prawdę dowolna nazwa. Ja użyłem CertBot.

      Application description tu również pełna dowolność.

      Po utworzeniu aplikacji dostaniemy zestaw Application Key i Application Secret które musimy sobie zapisać.

    2. Teraz musiny jeszcze uzyskać consumer key aby to zrobić odpalamy

      node /opt/certbot-dns-ovh/bin/authorize.js\
      --endpoint=ovh-eu\
      --app_key=yourappkey\
      --app_secret=yourappsecret

      opwiednio uzupełniając app_key i app_secret z poprzedniego kroku.

      W odpowiedzi uzyskamy coś takiego:

      {
       validationUrl: 'https://eu.api.ovh.com/auth/?credentialToken=IQKuZRnhSNg9ny79nGFD1gZXfns71hXE2RgIr47lXaMv9vIvtaDCIZqfR',
       consumerKey: '93niM3kADzDiocoN78H*DvQmNNIBr',
       state: 'pendingValidation'
      }
    3. Wchodzimy w link podany w validationUrl z poprzedniego kroku i logujemy się na stronie. Wymagane jest to aby certbot mógł pobierać dane z API.

    4. Teraz musimy jeszcze wyedytować plik konfiguracyjny:

      cd /opt/certbot-dns-ovh
      cp .env.example .env
      nano .env

      Wpisujemy wszystkie uzyskane dane z OVH i zapisujemy.

    Generowanie certyfikatu

    Aby wygenerować nowy certyfikat Wildcard odpalamy polecenie:

     certbot certonly --manual --preferred-challenges=dns-01\
      --manual-auth-hook '/opt/certbot-dns-ovh/bin/create-record.js'\
      --manual-cleanup-hook '/opt/certbot-dns-ovh/bin/delete-record.js'\
      --server https://acme-v02.api.letsencrypt.org/directory\
      -d *.example.com -d example.com

    Waże jest aby wygenerować certyfikat dla domeny głównej example.com jak i subdomen *.example.com bo to nie są równoważne adresy.

    W tym momencie certbot spróbuje połączyć się poprzez API do OVH. Gdy to się powiedzie doda nowy rekord TXT, zweryfikuje czy się udało, a następnie usunie go.

    Obtaining a new certificate
    Performing the following challenges:
    dns-01 challenge for example.com
    
    -------------------------------------------------------------------------------
    NOTE: The IP of this machine will be publicly logged as having requested this
    certificate. If you're running certbot in manual mode on a machine that is not
    your server, please ensure you're okay with that.
    
    Are you OK with your IP being logged?
    -------------------------------------------------------------------------------
    (Y)es/(N)o: y
    Waiting for verification...
    Cleaning up challenges
    
    IMPORTANT NOTES:
     - Congratulations! Your certificate and chain have been saved at:
       /etc/letsencrypt/live/example.com/fullchain.pem
       Your key file has been saved at:
       /etc/letsencrypt/live/example.com/privkey.pem
       Your cert will expire on 2018-06-28. To obtain a new or tweaked
       version of this certificate in the future, simply run certbot
       again. To non-interactively renew *all* of your certificates, run
       "certbot renew"
     - If you like Certbot, please consider supporting our work by:
    
       Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
       Donating to EFF:                    https://eff.org/donate-le

    Jeśli wszystko poszło zgodnie z planem dostaniemy swój certyfikat wraz z informacjami gdzie został zapisany.

    Odnowienie certyfikatu

    Aby odnowić certyfikat wystarczy tylko uruchomić polecenie

    certbot renew --quiet

    Możemy sobie wrzucić ten wpis do crona np:

    @weekly certbot renew --quiet && service nginx reload

    Konieczny jest reload Nginx lub innego serwera WWW aby wczytały się nowe certyfikaty.

    Certbot sam zadba o odnowienie, więc jeśli certyfikat jest ważny jeszcze przez długi czas to nie nastąpi próba odnowienia go.

    Problemy

    Czasami mogą się pojawić rózne problemy. Ja u siebie zaobserwoałem kilka. Wtedy trzeba sprawdzić czy wszystko jest ok:

    • Czy poprawnie wykonaliśmy generowanie kluczy Application Key i Secre oraz czy nie pomyliliśmy się przy ich wpisywaniu
    • Czy zalogowaliśmy się na stronę w pkt.2 konfiguracji
    • Czy rekord A/AAA domeny dla której chcemy uzyskać certyfikat wskazuje poprawnie na IP serwera z którego chcemy go uzyskać.

    Jeśli dalej będą problemy to chętnie postaram się pomóc.

    Top