GNU/Linux >> Znalost Linux >  >> Linux

Vydávejte bezplatné a CA podepsané SSL certifikáty pro webové servery od LetsEncrypt

Úvod:
Certifikáty SSL poskytují dvě funkce:
1. Autentizace
2. Šifrování

Šifrování lze dosáhnout bez ověřování, ale z nějakého důvodu se někdo rozhodl je spojit do jednoho certifikátu. Zdá se, že to dává smysl pro banky a seriózní stránky elektronického obchodování, které je třeba řádně ověřit. Proto při vývoji protokolu HTTPS nebylo možné šifrovat pouze tok HTTP. Tato situace nás učinila závislými na certifikačních autoritách, abychom získali certifikát, i když jsme chtěli pouze šifrování. Nyní nějaká geniální skupina lidí na https://letsencrypt.org/ konečně vytvořila možnost získat certifikáty, které tvoří jednoduché ověření autentizace, zavoláním na URL a očekáváním konkrétní odpovědi, a v případě úspěchu vydá bezplatný 90 dní platný a podepsaný CA. SSL certifikát. Pro systémové administrátory se tak tento proces vyžádání a instalace takového bezplatného certifikátu stal poměrně jednoduchým. Zde je jedna metoda, jak toho dosáhnout na webovém serveru Debian/Ubuntu.
Odkazy:http://www.admin-magazine.com/Articles/Getting-a-free-TLS-certificate-from-Let- s-Encrypt?utm_source=ADMIN+Newsletter&utm_campaign=ADMIN_Update_Free_Certificates_with_Let%27s_Encrypt_2016-20-07&utm_medium=e-mail

KROK:

Instalace LetsEncrypt

apt-get update && apt-get install git
cd /usr/local/lib/
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --email [email protected] --agree-tos --help
echo "export PATH=$PATH:/usr/local/lib/letsencrypt" >> /root/.bashrc
. /root/.bashrc

POZNÁMKA: Ujistěte se, že vaše webová stránka, na kterou chcete přidat HTTPS, je již nakonfigurována a funguje na vašem webovém serveru.
Důvodem je, že během procesu žádosti o certifikát vytvoří LetsEncrypt další podadresář ({htdocs}/ .well-known/acme-challenge/) a speciální dočasný soubor v htdocs webu (na který ukazuje direktiva DocumentRoot v Apache), pak zavolají tento soubor na webu ze serveru LetsEncrypt k ověření adresy URL. Pokud je volaná adresa URL neplatná, certifikát nevydá. Z tohoto důvodu musí být váš web aktivní a musíte zadat cestu htdocs. Po procesu ověřování bude dočasný soubor vymazán, ale nikoli podadresáře. Zůstanou prázdné.

Odstraňování problémů:

InsecurePlatformWarning
Pokud se zobrazí následující chybová zpráva, v Debian Wheezy to můžete vyřešit importem SSl do Pythonu. Viz níže.
InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning

Import podpory Python SSL:
python
>>> import ssl
>>> (CTRL-D)

Upgrade klientského programu LetsEncrypt

rm -rf /root/.local/share/letsencrypt
rm -rf /usr/local/lib/letsencrypt.old &>/dev/null
mv /usr/local/lib/letsencrypt /usr/local/lib/letsencrypt.old
cd /usr/local/lib/
git clone https://github.com/letsencrypt/letsencrypt

Žádost o certifikát

Např. pro doménu blog.mydomain.com
POZNÁMKA:na první žádost vás skript požádá o zadání e-mailové adresy pro kontaktní účely a také o přijetí podmínek používání tohoto nástroje. Poté vám tyto otázky nebude klást.
letsencrypt-auto certonly --webroot -w /www/clients/blog.mydomain.com/htdocs -d blog.mydomain.com
Certifikáty a klíč budou uloženy v /etc/letsencrypt/live/blog.mydomain.com/ jako:
cert.pem : Certificate
chain.pem : CA Certificate
privkey.pem : Private key
fullchain.pem : Combination of the certificate and the CA Certificate

Místo přesouvání certifikátu stačí nakonfigurovat Apache nebo jiný webový server tak, aby ukazoval na soubory certifikátů tam, kde jsou.
Tímto způsobem lze vytvořit úlohu cron pro pravidelné automatické obnovování certifikátu bez ručního zásahu.
Certifikát bude platný pouze 90 dní; žádné výjimky.
To znamená, že stejný výše uvedený příkaz bude nutné spouštět každé 3 měsíce nebo dříve s přidáním možnosti –renew-by-default .
Limit certifikátů, o které můžete pro určitou doménu požádat, je:aktuálně 5 certifikátů / 7 dní.

Obnovení jednoho certifikátu:

Pro automatickou obnovu certifikátu se doporučuje použít úlohu cron a přidat možnost –obnovit podle výchozího nastavení v příkazu např. takto:
letsencrypt-auto certonly --renew-by-default --webroot -w /www/clients/blog.mydomain.com/htdocs -d blog.mydomain.com

Obnovování všech nainstalované certifikáty Letsencrypt:

/usr/local/lib/letsencrypt/letsencrypt-auto renew
Poznámka: Doporučuje se odeslat výstup příkazu e-mailem pro ověření, zda byl proces úspěšný.

Další informace

Certifikáty LetsEncrypt jsou uloženy v adresářích /etc/letsencrypt/ různými způsoby. Jednoduše se NEDOPORUČUJE mazat žádné certifikáty, soubory nebo symbolické odkazy v těchto adresářích, protože soubory v adresářích „keys“ a „csr“ nejsou identifikovány tak, aby odkazovaly na konkrétní certifikát. Pouhé smazání některých souborů, ale nikoli jiných souvisejících se stejným certifikátem, může zmást příkaz klienta a vy pak nemůžete požadovat žádné další certifikáty. Chybová zpráva z klientského programu je něco jako:
letsencrypt TypeError: coercing to Unicode: need string or buffer, NoneType found
Pokud se někdy dostanete do tohoto bodu bez návratu, jednoduše smažte všechny adresáře:archivovat , csr , klávesy , živě a obnovení ALE ne účty . Poté znovu vystavte žádosti o certifikáty pro již existující weby. Certifikáty budou poté obnoveny a poté můžete také požádat o nové.

Další informace o předmětu naleznete na:
https://letsencrypt.readthedocs.org/en/latest/using.html

Pohodlný skript

Pokud chcete mít možnost vydávat certifikát a chcete, aby se po 80 dnech samoobnovil, mohl by se vám hodit tento skript.
#!/bin/bash
# Purpose: Issue or renew a certificate from LetsEncrypt
# It will also issue an 'at'command which will be responsible to automatically renew the certificate automatically
# This script also issues a new at comand which will do the same in around 3 Months days depending on the settings here
# Syntax: cert_request.sh -s SITE_NAME -d SITE_HTDOCS
# Changes: 30.12.2015 First implementation of the script
# 10.01.2016 Took out the read of wpinstall.cfg config file. Added checks for the letsencrypt and at programs
#--------------------------------------------------------------
. /root/.bashrc
RENEW_DAYS="80"
# Absolute path to this script.
SCRIPT=$(readlink -f $0)
CERTS_DIR="/etc/letsencrypt/live"
# Absolute path this script is in.
scriptdir=$(dirname $SCRIPT)
encryptprgm="/usr/local/lib/letsencrypt/letsencrypt-auto"
atprgm="/usr/bin/at"
EMAIL="[email protected]"
#
# Check the syntax
function usage () {
echo "Usage: cert_request.sh -s SITE_NAME -d SITE_HTDOCS"
echo "-s SITE_NAME Full web site address WITHOUT the 'http://' eg.: www.myblog.com"
echo "-d SITE_HTDOCS The absolute path where WordPress will be installed. eg. /www/sites/www.mysite.com/htdocs"
exit 1
}
#
if [ $# -ne 4 ]; then
echo "ERROR: Wrong number of given argunents."
usage
fi
# Make sure the letsencrypt client prgm is installed
if ! [ -e $encryptprgm ] ; then
echo "ERROR: the letsencrypt program isn not installed. Install it and retry."
echo "See instructions at: //tipstricks.itmatrix.eu/install-new-and-signed-ssl-certificate-for-web-servers"
exit 1
fi
# Make sure the at is installed
if ! [ -e $atprgm ] ; then
echo "ERROR: the 'AT' program isn not installed. Install it and retry."
echo "apt-get install at"
exit 1
fi
# Everything look good so far. Lets start.
# get the command options
while getopts "s:d:" OPTION
do
case $OPTION in
s) SITE_NAME=$OPTARG
;;
d) SITE_HTDOCS=$OPTARG
;;
h|?|*)
echo "ERROR: argument(s) unknown."
usage
;;
esac
done
echo "Requesting certificate at LetsEncrypt"
# Does it exist already, then renew only, otherwise request renewing the cert
if [ -d $CERTS_DIR/${SITE_NAME} ] ; then
echo "The certificate already exists. Requesting a renewal"
RENEW="--renew-by-default"
else
RENEW=""
fi
#
if ($encryptprgm certonly $RENEW --webroot -w $SITE_HTDOCS -d ${SITE_NAME} &>/dev/null); then
# Enable the Apache SSL configuration and restart Apache
(echo "Certificate request successful."
echo "Issuing a renewal of the certificate in 80 days using 'at' command"
service apache2 restart
echo "$SCRIPT -s $SITE_NAME -d $SITE_HTDOCS" | $atprgm now + $RENEW_DAYS days)| tee /tmp/cert_request.sh.log \
| mail -s "Request/Renewal of Certificate for $SITE_NAME" [email protected]
echo -e "------- SITES LIST --------\n$(ls -1 /etc/apache2/sites-enabled/ | egrep -v '^00|^wptest1')\n\n--------- CERTIFICATES LIST ---------$(ls -l /etc/letsencrypt/live/ | cut -c29-)\n\n------- AT Jobs LIST -------\n$(/root/bin/atlist.sh)" | mail -s "Request/Renewal of Certificate request LIST" $EMAIL
cat /tmp/cert_request.sh.log
exit 0
else
(echo "ERROR: The certificate request/renewal FAILED.")| tee /tmp/cert_request.sh.log \
| mail -s "Request/Renewal of Certificate for $SITE_NAME" $EMAIL
cat /tmp/cert_request.sh.log
exit 2
fi

#

Stav certifikátů

Zde je užitečný skript, který zobrazí následující informace:
– Seznam úloh AT připravených ke spuštění v požadovaný čas
– Seznam aktuálních certifikátů a jejich časových razítek
Od každého letsencrypt je platný pouze 90 dní, což vám poskytne přehled o tom, jak staré jsou současné certifikáty a kdy budou další žádosti o certifikáty vyřízeny.
#!/bin/bash
# Description: Displays all 'at' jobs and their respective commands
# Systax: atlist.sh
# Changes: 05.11.2016 First inplementation
########################################################################
# Get the short jobs list and expand from there
echo "================ AT Jobs ready to start at the required times ==============="
atq | while read line ; do
jobnr=$(echo $line | awk '{print $1}')
echo $line
# Pickup all the command lines after first line matching '}'.
# This excludes all the environment variables and the at exit line.
# Exclude the matching '}' line and empty lines
# Add an offset of 8 chars to each command line.
# at -c $jobnr | grep -A100 -m1 -e '^\}' | grep -v '^\}' | sed -e '/^$/d' -e 's/^/ /'
at -c $jobnr | at -c $jobnr | sed -e '1,/^\}/d' -e '/^$/d' -e 's/^/ /'
done
echo ; echo
echo "=============== Age of present certificates ====================="
ls -l /etc/letsencrypt/live/*/cert.pem | awk '{print $6" "$7" "$8" "$9}' | sed -e 's|/etc/letsencrypt/live/||' -e 's|/cert.pem||'

Instalace a používání CERBOT

Úvod:
Nástroj Cerbot jednoduše přidává uživatelsky přívětivější funkce k originálu Lestencrypt uvedenému výše.
Další informace naleznete na tomto webu:
https://certbot.eff.org/docs/install.html

Použít:
Umí odeslat žádost o certifikát na server Letsencryp a také vytvořit dočasný webový server, který umožní ověřit připojení HTTP k webu, pro který je certifikát požadován. Tyto funkce lze volat jednoduše přidáním volby do příkazového řádku.
Například:Pokud chci, aby webová stránka byla pouze SSL, pak by virtuální hostitel HTTP obecně provedl přesměrování na HTTPS automaticky pro jakýkoli požadavek HTTP. V tomto případě blokuje ověření webové stránky ze serveru Letsencrypt. Znám 2 způsoby, jak se tomuto problému vyhnout.
1) Vytvořte podmínku pro direktivu přesměrování v Apache, která nepřesměrovává na HTTPS, pokud je URI /.well-known/…..
Pro:Žádné výpadky webového serveru
Proti:Pro každý web SSL musí být provedena zvláštní podmínka v direktivě přesměrování.
2) Zastavte webový server. Spusťte cerbot s možností –standalone . Restartujte webový server.
Toto řešení by bylo dobré pouze pro prostředí clusteru webových serverů, pokud nechcete mít na svém webu výpadky.
Pro:Pro weby nejsou potřeba další podmínky přesměrování. Opravdu dobré pro servery Nginx, kde je obtížné vytvořit podmínky pro přesměrování
Proti:Během této procedury dojde k výpadku webu, který může trvat dlouho, pokud máte mnoho webů, které potřebují vytvoření/obnovu certifikátů.

Instalace:
wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto

Nebo pokud máte Ubuntu 16.04 nebo novější, budou pro instalaci také vhodnější následující příkazy:
apt-get install certbot python-certbot-apache
Poté získáte nápovědu pro „certbot“
certbot --help
Příklad „certbota ' pomocí vlastního webového serveru pro autentizaci, čímž se vyhnete potížím s nutností zasahovat do Apache/NginX pro proces ověřování.
Následující příklad bude vyžadovat jeden certifikát, který bude platný pro tyto 4 subdomény pomocí mechanismus (SAN).
certbot certonly --standalone -d www.mydomain.com -d www.mydomain2.com -d mailman.mydomain.com -d mail.mydomain.com
V tomto výše uvedeném příkladu se musíte ujistit, že Apache/NginX nepoužívá port 80. Pokud ano, vypněte webový server před tímto příkazem a restartujte jej hned po něm. Výsledkem bude krátký výpadek přístupu k webu. Tento výpadek může být přijatelný v závislosti na tom, zda máte webový server za nástrojem pro vyrovnávání zátěže nebo zda takový výpadek umožňuje webová služba.
Příklad:
service apache2 stop
certbot certonly --standalone -d www.mydomain.com -d www.mydomain2.com -d mailman.mydomain.com -d mail.mydomain.com
service apache2 start


Linux
  1. Zdarma SSL pro Nginx na Centos od Let’s encrypt

  2. Nastavte certifikát SSL pro název hostitele na webovém panelu CentOS

  3. Chyba prohlížeče certifikátu SSL

  1. Jak opravit problém s protokolem Curl TLS SSL z kódu CLI a PHP

  2. Seznam všech dostupných certifikátů ssl ca

  3. Umístění certifikátu SSL v systému UNIX/Linux

  1. Jak vygenerovat klíč CSR a nainstalovat certifikát SSL z CWP?

  2. Jak vygenerovat klíč a CSR v cPanel pro váš certifikát SSL

  3. Jak vygenerovat klíč SSL, CSR a certifikát s vlastním podpisem pro Apache