GNU/Linux >> Linux Esercitazione >  >> Linux

Emetti certificati SSL gratuiti e firmati da CA per server Web da LetsEncrypt

Introduzione:
I certificati SSL forniscono due funzioni:
1. Autenticazione
2. Crittografia

La crittografia può essere ottenuta senza autenticazione ma, per qualche motivo, qualcuno ha deciso di unirli insieme in un unico certificato. Sembra avere senso per banche e siti di e-commerce seri che devono essere adeguatamente autenticati. Pertanto, quando è stato sviluppato il protocollo HTTPS, non è stato possibile crittografare solo il flusso di HTTP. Questa situazione ci ha reso dipendenti dalle autorità di autenticazione dei certificati per ottenere un certificato anche se volevamo solo la crittografia. Ora un gruppo geniale di persone su https://letsencrypt.org/ ha finalmente creato la possibilità di ottenere certificati che preformano una semplice verifica dell'autenticazione, chiamando l'URL e aspettandosi una risposta specifica, e se l'esito positivo emette 90 giorni gratuiti validi e firmati dalla CA Certificato SSL. Per gli amministratori di sistema questo processo di richiesta e installazione di tale certificato gratuito è quindi diventato abbastanza semplice. Ecco un metodo per farlo in un server web Debian/Ubuntu.
Riferimenti: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=email

PASSAGGI:

Installazione di 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

NOTA: Assicurati che il tuo sito web a cui vuoi aggiungere HTTPS sia già configurato e risieda nel tuo server web.
Il motivo è che durante il processo di richiesta di un certificato, LetsEncrypt creerà una sottodirectory aggiuntiva({htdocs}/ .well-known/acme-challenge/) e uno speciale file temporaneo negli htdocs del sito (indicato dalla direttiva DocumentRoot in Apache), quindi richiamano quel file sul sito dal server LetsEncrypt per autenticare l'URL. Se l'URL chiamato non è valido, non emetterà il certificato. Per questo motivo il tuo sito deve essere attivo e devi dare il percorso degli htdocs. Dopo il processo di autenticazione, il file temporaneo verrà cancellato ma non le sottodirectory. Rimarranno vuoti.

Risoluzione dei problemi:

Avviso piattaforma non sicura
Se ricevi il seguente messaggio di errore, in Debian Wheezy puoi risolverlo importando SSl in Python. Vedi sotto.
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

Importazione del supporto SSL Python:
python
>>> import ssl
>>> (CTRL-D)

Aggiornamento del programma client 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

Richiesta del certificato

Per esempio. per il dominio blog.mydomain.com
NOTA:alla prima richiesta lo script ti chiederà di fornire un indirizzo email a scopo di contatto e di accettare le condizioni di utilizzo di questo strumento. Successivamente non ti farà queste domande.
letsencrypt-auto certonly --webroot -w /www/clients/blog.mydomain.com/htdocs -d blog.mydomain.com
I certificati e la chiave verranno archiviati in /etc/letsencrypt/live/blog.mydomain.com/ come:
cert.pem : Certificate
chain.pem : CA Certificate
privkey.pem : Private key
fullchain.pem : Combination of the certificate and the CA Certificate

Invece di spostare il certificato, configura semplicemente Apache o un altro server Web in modo che punti ai file certs dove si trovano.
In questo modo è possibile creare un processo cron per rinnovare regolarmente il certificato automaticamente senza intervento manuale.
Il certificato sarà valido solo per 90 giorni; senza eccezioni.
Ciò significa che lo stesso comando precedente dovrà essere eseguito ogni 3 mesi o prima con l'aggiunta dell'opzione –renew-by-default .
Il limite di certificati che puoi richiedere per un determinato dominio è:attualmente 5 certificati / 7 giorni.

Rinnovo certificato unico:

Per rinnovare automaticamente il certificato si suggerisce di utilizzare un cron job e di aggiungere l'opzione –renew-by-default nel comando es. come segue:
letsencrypt-auto certonly --renew-by-default --webroot -w /www/clients/blog.mydomain.com/htdocs -d blog.mydomain.com

Rinnovo tutti certificati Letsencrypt installati:

/usr/local/lib/letsencrypt/letsencrypt-auto renew
Nota: Si consiglia di inviare l'output del comando via e-mail per verificare se il processo è andato a buon fine.

Informazioni aggiuntive

I certificati di LetsEncrypt sono archiviati nelle directory /etc/letsencrypt/ in diversi modi. Semplicemente NON è consigliabile eliminare nessuno dei certificati, file o collegamenti simbolici in queste directory perché i file nelle directory "keys" e "csr" non sono identificati per fare riferimento a un certificato specifico. Quindi la semplice eliminazione di alcuni file ma non di altri relativi allo stesso certificato potrebbe confondere il comando client e quindi non è possibile richiedere altri certificati. Il messaggio di errore dal programma client è qualcosa del tipo:
letsencrypt TypeError: coercing to Unicode: need string or buffer, NoneType found
Se mai arrivi a quel punto di non ritorno, elimina tutte le directory:archivio , csr , chiavi , in diretta e rinnovo MA non account . Quindi emettere nuovamente le richieste di certificati per i siti già esistenti. I certificati verranno quindi rinnovati e potrai poi richiederne anche di nuovi.

Per ulteriori informazioni sull'argomento, vedere:
https://letsencrypt.readthedocs.org/en/latest/using.html

Script confortevole

Se vuoi essere in grado di emettere un certificato e desideri che si rinnovi automaticamente dopo 80 giorni, questo script potrebbe essere di qualche utilità.
#!/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

#

Stato dei certificati

Ecco uno script utile che visualizzerà le seguenti informazioni:
– Elenco dei lavori AT pronti per essere avviati all'ora richiesta
– Elenco dei certificati presenti e relativi timestamp dei file
Da ogni crittografiamo è valido solo per 90 giorni, questo ti darà una panoramica di quanti anni hanno i certificati attuali e quando sarà la prossima volta che verranno fatte le richieste di certificati.
#!/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||'

Installazione e utilizzo di CERBOT

Introduzione:
Lo strumento Cerbot aggiunge semplicemente funzionalità più intuitive all'originale Lestencrypt visto sopra.
Vedi questo sito per ulteriori informazioni:
https://certbot.eff.org/docs/install.html

Usa:
Può fare una richiesta di certificato al server Letsencryp e anche creare un server web temporaneo per consentire di verificare la connessione HTTP di un sito per il quale è richiesto il certificato. Queste funzionalità possono essere richiamate semplicemente aggiungendo un'opzione sulla riga di comando.
Ad esempio:se voglio che un sito Web sia solo SSL, in genere l'host virtuale HTTP eseguirà automaticamente un reindirizzamento a HTTPS per qualsiasi richiesta HTTP. In questo caso blocca la verifica del sito web da parte del server Letsencrypt. Ci sono 2 modi che conosco per evitare questa difficoltà.
1) Crea una condizione sulla direttiva di reindirizzamento in Apache che non reindirizza a HTTPS se l'URI è /.well-known/…..
Pro:nessun tempo di inattività del server Web
Contro:È necessario eseguire una condizione aggiuntiva nella direttiva di reindirizzamento per ciascun sito SSL.
2) Arrestare il server Web. Esegui cerbot con l'opzione –standalone . Riavvia il server Web.
Questa soluzione sarebbe utile solo per un ambiente cluster di server Web se non desideri avere tempi di inattività sul tuo sito.
Pro:non sono necessarie condizioni di reindirizzamento aggiuntive per i siti. Davvero ottimo per i server Nginx in cui le condizioni di reindirizzamento sono difficili da creare
Contro:il sito subisce un tempo di inattività durante questa procedura che può durare a lungo se hai molti siti che necessitano di creazione/rinnovo di certificati.

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

Oppure se hai Ubuntu 16.04 o successivo, per l'installazione saranno preferibili anche i seguenti comandi:
apt-get install certbot python-certbot-apache
Quindi per ottenere assistenza su 'certbot'
certbot --help
Un esempio di "certbot ' utilizzando il proprio web server per l'autenticazione, evitando così le difficoltà di dover interferire con Apache/NginX per il processo di autenticazione.
L'esempio seguente richiederà un unico certificato che sarà valido per questi 4 sottodomini utilizzando il (SAN).
certbot certonly --standalone -d www.mydomain.com -d www.mydomain2.com -d mailman.mydomain.com -d mail.mydomain.com
In questo esempio sopra è necessario assicurarsi che Apache/NginX non stia utilizzando la porta 80. In tal caso, spegnere il server Web prima di questo comando e riavviarlo subito dopo. Ciò comporterà un breve tempo di inattività dell'accesso al Web. Questo tempo di inattività potrebbe essere accettabile a seconda che tu abbia il server web dietro un sistema di bilanciamento del carico o se il servizio web può consentire tale tempo di inattività.
Esempio:
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. SSL gratuito per Nginx su Centos di Let's encrypt

  2. Come generare la chiave CSR e installare il certificato SSL da CWP?

  3. Come risolvere il problema del protocollo SSL TLS Curl da CLI e codice PHP

  4. Elenca tutti i certificati ssl ca disponibili

  5. Posizione del certificato SSL su UNIX/Linux

Come installare il certificato SSL gratuito per Apache su CentOS 8

Come installare il certificato SSL gratuito per Nginx su CentOS 8

Installa certificati SSL in un server Windows

Come abilito Let's encrypt Free SSL Certificate per il mio dominio in Plesk?

Proteggi ISPConfig 3 e servizi con il certificato firmato GoDaddy su CentOS

Utilizzo di Cockpit per monitorare e gestire graficamente più server Linux da un browser Web