GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Stellen Sie kostenlose und CA-signierte SSL-Zertifikate für Webserver von LetsEncrypt aus

Einführung:
SSL-Zertifikate bieten zwei Funktionen:
1. Authentifizierung
2. Verschlüsselung

Die Verschlüsselung kann ohne Authentifizierung erreicht werden, aber aus irgendeinem Grund hat sich jemand entschieden, sie in einem Zertifikat zusammenzuführen. Es scheint sinnvoll für Banken und seriöse E-Commerce-Sites zu sein, die ordnungsgemäß authentifiziert werden müssen. Als das HTTPS-Protokoll entwickelt wurde, war es daher nicht möglich, nur den HTTP-Stream zu verschlüsseln. Diese Situation machte uns abhängig von Certificate Authentication Authorities, um ein Zertifikat zu erhalten, selbst wenn wir nur Verschlüsselung wollten. Jetzt hat eine geniale Gruppe von Leuten bei https://letsencrypt.org/ endlich die Möglichkeit geschaffen, Zertifikate zu erhalten, die eine einfache Authentifizierungsüberprüfung durchführen, indem sie die URL aufrufen und eine bestimmte Antwort erwarten, und bei Erfolg kostenlos 90 Tage gültig und CA-signiert ausstellt SSL-Zertifikat. Für Systemadministratoren ist dieser Vorgang des Anforderns und Installierens eines solchen kostenlosen Zertifikats daher ziemlich einfach geworden. Hier ist eine Methode, genau dies auf einem Debian/Ubuntu-Webserver zu tun.
Referenzen: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

SCHRITTE:

LetsEncrypt installieren

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

HINWEIS: Stellen Sie sicher, dass Ihre Website, zu der Sie HTTPS hinzufügen möchten, bereits konfiguriert und auf Ihrem Webserver aktiv ist.
Der Grund dafür ist, dass LetsEncrypt während des Prozesses der Zertifikatsanforderung ein zusätzliches Unterverzeichnis erstellt ({htdocs}/ .well-known/acme-challenge/) und eine spezielle temporäre Datei in den htdocs der Site (auf die die DocumentRoot-Direktive in Apache verweist) rufen dann diese Datei auf der Site vom LetsEncrypt-Server auf, um die URL zu authentifizieren. Wenn die aufgerufene URL ungültig ist, wird das Zertifikat nicht ausgestellt. Aus diesem Grund muss Ihre Site live sein und Sie müssen den Pfad der htdocs angeben. Nach dem Authentifizierungsprozess wird die temporäre Datei gelöscht, aber nicht die Unterverzeichnisse. Sie bleiben leer.

Fehlerbehebung:

UnsicherePlattformWarnung
Wenn Sie die folgende Fehlermeldung erhalten, können Sie sie in Debian Wheezy lösen, indem Sie SSL in Python importieren. Siehe unten.
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

Python-SSL-Unterstützung importieren:
python
>>> import ssl
>>> (CTRL-D)

Aktualisierung des LetsEncrypt-Client-Programms

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

Zertifikat anfordern

Z.B. für die Domain blog.mydomain.com
HINWEIS:Bei der ersten Anfrage werden Sie vom Skript aufgefordert, eine E-Mail-Adresse für Kontaktzwecke anzugeben und die Nutzungsbedingungen dieses Tools zu akzeptieren. Danach werden Ihnen diese Fragen nicht mehr gestellt.
letsencrypt-auto certonly --webroot -w /www/clients/blog.mydomain.com/htdocs -d blog.mydomain.com
Die Zertifikate und der Schlüssel werden in /etc/letsencrypt/live/blog.mydomain.com/ gespeichert als:
cert.pem : Certificate
chain.pem : CA Certificate
privkey.pem : Private key
fullchain.pem : Combination of the certificate and the CA Certificate

Anstatt das Zertifikat zu verschieben, konfigurieren Sie einfach Apache oder einen anderen Webserver so, dass er auf die Zertifikatsdateien zeigt, wo sie sich befinden.
Auf diese Weise kann ein Cron-Job erstellt werden, um das Zertifikat regelmäßig automatisch ohne manuellen Eingriff zu erneuern.
Das Zertifikat ist nur 90 Tage gültig; keine Ausnahmen.
Das bedeutet, dass der gleiche obige Befehl alle 3 Monate oder früher mit der Hinzufügung der Option –renew-by-default ausgeführt werden muss .
Das Limit der Zertifikate, die Sie für eine bestimmte Domain anfordern können, beträgt:derzeit 5 Zertifikate / 7 Tage.

Einzelzertifikat erneuern:

Um das Zertifikat automatisch zu erneuern, wird empfohlen, einen Cron-Job zu verwenden und die Option –renew-by-default hinzuzufügen im Befehl zB. wie folgt:
letsencrypt-auto certonly --renew-by-default --webroot -w /www/clients/blog.mydomain.com/htdocs -d blog.mydomain.com

alle erneuern Installierte Letsencrypt-Zertifikate:

/usr/local/lib/letsencrypt/letsencrypt-auto renew
Hinweis: Es wird empfohlen, die Ausgabe des Befehls per E-Mail zu senden, um zu überprüfen, ob der Vorgang erfolgreich war.

Zusätzliche Informationen

Die Zertifikate von LetsEncrypt werden auf unterschiedliche Weise in /etc/letsencrypt/-Verzeichnissen gespeichert. Es wird einfach NICHT empfohlen, die Zertifikate, Dateien oder symbolischen Links in diesen Verzeichnissen zu löschen, da die Dateien in den Verzeichnissen „keys“ und „csr“ nicht so gekennzeichnet sind, dass sie auf ein bestimmtes Zertifikat verweisen. Wenn Sie also nur einige Dateien löschen, andere jedoch nicht, die sich auf dasselbe Zertifikat beziehen, kann der Client-Befehl verwirrt werden, und Sie können dann keine weiteren Zertifikate anfordern. Die Fehlermeldung des Client-Programms sieht etwa so aus:
letsencrypt TypeError: coercing to Unicode: need string or buffer, NoneType found
Wenn Sie jemals an diesen Punkt kommen, an dem es keine Rückkehr gibt, löschen Sie einfach alle Verzeichnisse:Archiv , csr , Tasten , leben und Erneuerung ABER nicht Konten . Stellen Sie dann erneut Zertifikatanforderungen für bereits vorhandene Sites aus. Die Zertifikate werden dann erneuert und Sie können dann auch neue beantragen.

Weitere Informationen zum Thema finden Sie unter:
https://letsencrypt.readthedocs.org/en/latest/using.html

Komfortables Skript

Wenn Sie ein Zertifikat ausstellen möchten und es sich nach 80 Tagen selbst erneuern soll, könnte dieses Skript von Nutzen sein.
#!/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

#

Status der Zertifikate

Hier ist ein nützliches Skript, das die folgenden Informationen anzeigt:
– Liste der AT-Jobs, die zur erforderlichen Zeit startbereit sind
– Liste der vorhandenen Zertifikate und ihrer Dateizeitstempel
Seit jedem letsencrypt ist nur 90 Tage gültig, das gibt Ihnen einen Überblick, wie alt die vorhandenen Zertifikate sind und wann das nächste Mal Zertifikate angefordert werden.
#!/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||'

Installieren und Verwenden von CERBOT

Einführung:
Das Cerbot-Tool fügt dem oben gezeigten Lestencrypt-Original einfach benutzerfreundlichere Funktionen hinzu.
Weitere Informationen finden Sie auf dieser Website:
https://certbot.eff.org/docs/install.html

Verwendung:
Es kann eine Zertifikatsanforderung an den Letsencryp-Server stellen und auch einen temporären Webserver erstellen, um die Überprüfung der HTTP-Verbindung einer Website zu ermöglichen, für die das Zertifikat angefordert wird. Diese Funktionen können einfach durch Hinzufügen einer Option in der Befehlszeile aufgerufen werden.
Zum Beispiel:Wenn ich möchte, dass eine Website nur SSL ist, dann würde der virtuelle HTTP-Host im Allgemeinen automatisch eine Umleitung zu HTTPS für jede HTTP-Anforderung vornehmen. In diesem Fall wird die Überprüfung der Website vom Letsencrypt-Server blockiert. Es gibt zwei Möglichkeiten, die ich kenne, um diese Schwierigkeit zu vermeiden.
1) Erstellen Sie eine Bedingung für die Weiterleitungsanweisung in Apache, die nicht zu HTTPS umleitet, wenn der URI /.well-known/…..
ist Pro:Keine Ausfallzeit des Webservers
Contra:Eine zusätzliche Bedingung in der Weiterleitungsanweisung muss für jede SSL-Site erfüllt werden.
2) Stoppen Sie den Webserver. Führen Sie cerbot mit der Option –standalone aus. Starten Sie den Webserver neu.
Diese Lösung wäre nur gut für eine Webserver-Clusterumgebung, wenn Sie keine Ausfallzeiten auf Ihrer Website haben möchten.
Pro:Keine Notwendigkeit für zusätzliche Umleitungsbedingungen für Websites. Wirklich gut für Nginx-Server, bei denen Umleitungsbedingungen schwierig zu erstellen sind.
Nachteil:Die Site erleidet während dieses Vorgangs eine Ausfallzeit, die lange dauern kann, wenn Sie viele Sites haben, die die Erstellung/Erneuerung von Zertifikaten benötigen.

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

Wenn Sie Ubuntu 16.04 oder höher haben, sind die folgenden Befehle auch für die Installation vorzuziehen:
apt-get install certbot python-certbot-apache
Dann erhalten Sie Hilfe zu ‚certbot‘
certbot --help
Ein Beispiel für einen 'certbot '-Befehl, der einen eigenen Webserver zur Authentifizierung verwendet, wodurch die Schwierigkeiten vermieden werden, Apache/NginX für den Authentifizierungsprozess stören zu müssen.
Das folgende Beispiel fordert ein einzelnes Zertifikat an, das für diese 4 Subdomains gültig ist, indem der verwendet wird (SAN)-Mechanismus.
certbot certonly --standalone -d www.mydomain.com -d www.mydomain2.com -d mailman.mydomain.com -d mail.mydomain.com
In diesem obigen Beispiel müssen Sie sicherstellen, dass Apache/NginX nicht den Port 80 verwendet. Wenn dies der Fall ist, fahren Sie den Webserver vor diesem Befehl herunter und starten Sie ihn direkt danach neu. Dies führt zu einer kurzen Ausfallzeit des Webzugriffs. Diese Ausfallzeit kann akzeptabel sein, je nachdem, ob Sie den Webserver hinter einem Load-Balancer haben oder der Webdienst eine solche Ausfallzeit zulassen kann.
Beispiel:
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. Kostenloses SSL für Nginx auf Centos von Let’s encrypt

  2. So generieren Sie einen Schlüssel und eine CSR in cPanel für Ihr SSL-Zertifikat

  3. Richten Sie ein SSL-Zertifikat für den Hostnamen im CentOS-Webpanel ein

  4. Fehler im Browser des SSL-Zertifikats

  5. Code für Malloc und kostenlos

So installieren Sie ein kostenloses SSL-Zertifikat für Apache unter CentOS 8

So installieren Sie ein kostenloses SSL-Zertifikat für Nginx unter CentOS 8

SSL-Zertifikate auf einem Windows-Server installieren

Wie aktiviere ich das kostenlose SSL-Zertifikat von Let’s encrypt für meine Domain in Plesk?

Sichern Sie ISPConfig 3 und Dienste mit einem von GoDaddy signierten Zertifikat auf CentOS

Verwenden von Cockpit zur grafischen Überwachung und Verwaltung mehrerer Linux-Server über einen Webbrowser