Frage Wie kann ich Let's Encrypt (letsencrypt.org) als kostenlosen SSL-Zertifikatsanbieter verwenden?


Ich habe ein paar Websites mit einem StartSSL-Zertifikat (CJSHayward.com, JobhuntTracker.com), und Firefox lehnt StartSSL ab und zeigt aufgrund der Zertifikatskette eine Fehlerseite an, die besagt, dass mein Server nicht richtig konfiguriert ist (IIRC). Ich bat um Hilfe und bestätigte, dass mein VirtualHost (verfügbar auf Anfrage) für die Zertifikatkette war und ich das Zwischenzertifikat korrekt installiert hatte. Die Websites werden ohne Fehler angezeigt, die mir in Chrome, Safari, Edge oder Opera bekannt sind.

Nach einigem Suchen, Lass uns verschlüsseln! sah aus wie ein attraktives Angebot, und ich hatte (AFAICT) zu lange einen privaten Schlüssel und ein Zertifikat für jede Domäne unter / etc / apache2 / sites-enabled, abzüglich aller Domänen, die nicht mehr meine sind. Ich dachte, ich würde einen Probelauf machen und eine HTTPS-Verbindung zu einer Site herstellen, die jetzt nur unter HTTP verfügbar ist: JSH.name. Ich habe das "Let's Encrypt!" Zertifikat und privater Schlüssel zu meinem SSL-Verzeichnis und hinzugefügt:

<VirtualHost *:443>
        ServerAdmin cjshayward@pobox.com
        DocumentRoot /home/jonathan/stornge
        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/0000_csr-letsencrypt.pem
        SSLCertificateKeyFile /etc/apache2/ssl/0000_key-letsencrypt.pem
        ServerName jsh.name
        ServerAlias www.jsh.name
        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
        CustomLog /home/jonathan/logs/stornge.com combined
        <Directory /home/jonathan/stornge/>
            Options ExecCGI Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
        </Directory>
</VirtualHost>

Dann habe ich neu gestartet, um meine Arbeit zu sehen, und jede HTTP- oder HTTPS-Anfrage, die ich gemacht habe, hängt einfach. Dies beinhaltete zwei Domänen auf HTTPS mit meinem StartSSL-Zertifikat und die Domäne, die bei HTTPS, auf die über HTTP und HTTPS zugegriffen wurde, neu verfügbar sein sollte. Ich habe den VirtualHost und Apache geupdated, und alle alten Funktionen waren wieder funktionstüchtig.

Habe ich Let's "Verschlüsseln!" korrekt? Ich bin etwas misstrauisch, da die vorhandene SSL-Konfiguration private Schlüssel mit der Erweiterung .key, einer Zertifikatserweiterung von .crt und einer Zertifikatskettendatei mit der Erweiterung .pem hat.

Ich versuchte es erneut, nachdem ich das SSL-Verzeichnis überprüft hatte und feststellte, dass 0000_csr.letsencrypt.pem der Modus 644 war; Ich habe alle Dateien in diesem Verzeichnis in den Modus 600 geändert. Als ich es gerade ausprobiert habe, habe ich das alte Verhalten wiederholt: Die Website hängt an allen Anfragen und zusätzlich an einem apachectl restart bekommt eine Aussage (ich vergesse den genauen Wortlaut), dass httpd nicht läuft und der Computer versucht es zu starten.

Wie kann ich kostenlose Zertifikate für "Let's Encrypt" oder ein anderes Tool bekommen, das Firefox nicht entfremdet hat?

Ein apachectl -v gibt:

Server version: Apache/2.4.10 (Debian)
Server built:   Nov 28 2015 14:05:48

EIN uname -a gibt:

Linux www 4.4.0-x86_64-linode63 #2 SMP Tue Jan 19 12:43:53 EST 2016 x86_64 GNU/Linux

--AKTUALISIEREN--

Inhalte gelöscht, 0000_key-letsencrypt.pem wird begrenzt durch:

-----BEGIN PRIVATE KEY----- -----END PRIVATE KEY-----

Ein Fund in der Verzeichnishierarchie ergibt:

root @ www: / etc / letsencrypt # finde `pwd` -print
/ etc / letsencrypt
/ etc / letsencrypt / Schlüssel
/etc/letsencrypt/keys/0000_key-letsencrypt.pem
/ etc / letsencrypt / accounts
/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org
/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory
/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/1ef8dc9b994b9b68a4e9c7cedd003be3
/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/1ef8dc9b994b9b68a4e9c7cedd003be3/private_key.json
/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/1ef8dc9b994b9b68a4e9c7cedd003be3/meta.json
/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/1ef8dc9b994b9b68a4e9c7cedd003be3/regr.json
/ etc / letsencrypt / Erneuerung
/etc/letsencrypt/options-ssl-apache.conf
/ etc / letsencrypt / csr
/etc/letsencrypt/csr/0000_csr-letsencrypt.pem

Das Verzeichnis / home / jonathan / stornge und sein Inhalt sind weltweit lesbar und ausführbar, wo dies einen Unterschied machen würde.

--AKTUALISIEREN--

Hinzufügen etwas inhaltlich hier:

Das http://OrthodoxChurchFathers.com Die Apache-Conf-Datei hat zwei VirtualHosts, eins zum Aufspielen http://OrthodoxChurchFathers.com und eine Umleitung http://www.OrthodoxChurchFathers.com Anfragen an http://OrthodoxChurchFathers.com. Die .conf-Datei, die beide VirtualHosts enthält, ist:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName orthodoxchurchfathers.com
    #ServerAlias www.orthodoxchurchfathers.com fathers.jonathanscorner.com

DocumentRoot /home/cjsh/fathers/document_root
&lt;Directory />
    Options FollowSymLinks
    AllowOverride None
&lt;/Directory>
&lt;Directory /home/cjsh/fathers>
    Options ExecCGI FollowSymLinks Indexes MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
&lt;/Directory>

DirectoryIndex index.cgi index.html

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ "/usr/share/doc/"
&lt;Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
&lt;/Directory>

</ VirtualHost>

&lt;VirtualHost *:80>
ServerAdmin CJSHayward@POBox.com
ServerName www.orthodoxchurchfathers.com
ServerAlias fathers.jonathanscorner.com
DocumentRoot /home/cjsh/oldmirror
RewriteEngine On
RewriteRule ^(.*)$ http://orthodoxchurchfathers.com$1 [R=301,L]
&lt;/VirtualHost></pre></code>

Wenn ich versuche, es auszuführen und ororthodoxchurchfathers.com in Ruhe zu fragen, bekomme ich:

   ┌──────────────────────────────────────────────────────────────────────────────────────── ────────────┐    │ Wir konnten keinen vhost mit einem Servernamen oder einer Adresse von find finden    │ orthodoxhchurchvathers.com. │    │ Welchen virtuellen Host möchten Sie wählen? │    │ (Hinweis: Conf-Dateien mit mehreren Vhosts werden noch nicht unterstützt) │    │ ┌────────────────────────────────────────────────────────────────────────────────────────────────── ─────────── ┐    │ │1 008-stornge.conf | Mehrfache Namen | │ │    │ │2 014-paraskeva.conf | paraskeva.jonathansco | │ │    │ │3 036-unixytalk.conf | unixtalk.jsh.name | │ │    │ │4 038-proxy.conf | Mehrfache Namen | │ │    │ │5 027-anna.conf | Mehrfache Namen | │ │    │ │6 044-jobhunt-tracker.creation.c | Mehrfache Namen | │ │    │ │7 049-jsh.conf | Mehrfache Namen | │ │    │ │8 001-steampunk.conf | | │ │    │ │9 006-blajeny.conf | Mehrfache Namen | │ │    │ │10 032-videos.conf | Mehrfache Namen | d│ │    │ └──── ↓ (+) ───────────────────────────────────────────────────────────────────────────────────────────── ───────30% ────── ┘    ├──────────────────────────────────────────────────────────────────────────────────────── ────────────┤    │ │    └──────────────────────────────────────────────────────────────────────────────────────── ────────────┘


5
2018-03-21 17:32


Ursprung


Der Dateiname 0000_csr-letsencrypt.pem schlägt vor, dass Sie die Zertifikatsignierungsanforderung und nicht das tatsächlich signierte Zertifikat einschließen. Jede Datei, die Sie benötigen, sollte sich in einem Unterverzeichnis von befinden /etc/letsencrypt/livemit Ihrem Domain-Namen. und eine Seriennummer, von der du nichts brauchst /etc/letsencrypt/csr  oder keys  Haben Sie Einträge in der Protokolldatei? - Sven♦
Hat Apache Leseberechtigung? /home/jonathan/stornge? - warren


Antworten:


Ich habe ein paar Anleitungen für die Ausführung von Let's Encrypt SSL-Zertifikaten auf CentOS geschrieben: Ersteinrichtung & Cronning es.

Und meine per-Domain (ich verwende die Dateinamenskonvention von z-<[sub-]domain-tld>.conf) Apache-Konfigurationsdateien sehen folgendermaßen aus:

<VirtualHost *:80>
ServerName domain.tld
Redirect permanent / https://domain.tld/
</VirtualHost>

<VirtualHost *:443>
    SSLCertificateFile /etc/letsencrypt/live/domain.tld/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/domain.tld/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/domain.tld/fullchain.pem
    DocumentRoot /var/www/domain
    ServerName domain.tld
    ErrorLog logs/domain-error_log
    CustomLog logs/domain-access_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    ServerAdmin user@domain.tld

    SSLEngine on

<Files ~ "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

    <Directory "/var/www/domain">
         Options All +Indexes +FollowSymLinks
         AllowOverride All
         Order allow,deny
         Allow from all
    </Directory>

</VirtualHost>

Und meine ssl.conf sieht so aus:

#SSL options for all sites
Listen 443
SSLPassPhraseDialog  builtin
SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout  300
Mutex sysvsem default
SSLRandomSeed startup file:/dev/urandom  1024
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
SSLCompression          off
SSLHonorCipherOrder     on
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256

Verwenden Sie Let's Encrypt, um SSL-Zertifikate zu erhalten (und erhalten Sie Ihre Website bis zu einer "A" -Bewertung von SSL-Labors) ist ziemlich geradlinig - sobald Sie an einigen der Arcana der Apache-Configs und LE-Befehlszeilenargumente vorbeikommen.


3
2018-03-28 19:48



Vielen Dank; Darf ich eine Überarbeitung Ihres HOWTO vorschlagen? Let's Encrypt macht nicht mehrere VirtualHosts in einer .conf-Datei; Sie könnten einen Schritt hinzufügen, bevor Let's Encrypt durch die .conf-Dateien schaut, dass jede von Let's Encrypt bediente Domäne oder Subdomain nur ihren VirtualHost in der .conf-Datei haben sollte, und Dateien mit mehreren VirtualHosts sollten getrennt sein, damit Let's Encrypt einen VirtualHost findet. Eine .conf-Datei für jede Domäne, in der Sie die Verschlüsselung adressieren. (Dazu gehört eine Datei mit einer realen Site auf der Domäne.tld und mit ihr ein VirtualHost, der www.domain.tld auf den realen Standort umleitet.) - Jonathan Hayward
@ JonathanHayward - Ich starte Let's Encrypt in --standalone certonly Modus (siehe meine croning how-to (~/letsencrypt/letsencrypt-auto --agree-tos --keep --rsa-key-size 2048 --standalone certonly -m user@domain.tld -d domain.tld [-d sub.domain.tld [-d ...]])), Verwende ich keine der Plugins (wie das automatische Scannen von Apache-Konfigurationen), die ich in beiden How-To's behandle. Ich schätze den Vorschlag, habe aber guten Erfolg standalone Modus und lassen Sie es sozusagen hinter den Kulissen aktualisieren. - warren
Ok, aber ich schrieb aus Schwierigkeiten mit standalone  certonly. Ich habe das automatische Scannen nicht verwendet. - Jonathan Hayward
@ JonathanHayward - Welche Probleme hatten Sie mit? --standalone certonly? - warren
Vielen Dank; Siehe die aktualisierte Frage. Ich habe auch eine Frage an gestellt serverfault.com/questions/768643/ ... , die verwandt ist, aber getrennt und ich wollte es nicht auf eine bereits ausführliche Frage anheften. - Jonathan Hayward


Ich habe den Kunden gefunden GIPFEL funktioniert gut, es ist einfach einzurichten und in Gang zu setzen, es wird regelmäßig aktualisiert und ist leicht zu aktualisieren, und es funktioniert sehr gut auf Amazon Linux. Ich habe ein Tutorial geschrieben, das Sie finden können Hier.

Beginnen Sie mit dem Herunterladen von ACME und richten Sie es ein

https://github.com/hlandau/acme.git
cp ./acmetool /usr/local/bin
/usr/local/bin/acmetool quickstart

Fordern Sie ein Zertifikat an

./acmetool want example.com www.example.com

So richte ich das Verzeichnis für die Challenge ein - hier wird Let's Encrypt zum Validieren mit Ihrem Server verbunden

mkdir -p /var/www/acme-challenge/.well-known/acme-challenge
chmod -R user:www-data /var/www/acme-challenge/*
find /var/www/acme-challenge/ -type d -exec chmod 755 {} \;
vi /var/www/acme-challenge/.well-known/acme-challenge/text.html   (add "hello world!" or similar)

Es gibt weitere Details und Kommentare zu der oben verlinkten Website, und der Autor und die Community sind hilfreich.


1
2017-09-09 22:16





Ich hatte mit EFF gute Erfolge Certbot im Web-Root-Modus (weil die Idee eines automatisierten Prozesses, der den Webserver stoppt, wenn auch nur kurz, während der Zertifikatserneuerung, mir Angst macht).

Installieren Sie zuerst Certbot. Wenn Sie auf Debian Jessie sind (was zu dem Zeitpunkt, an dem ich dies schreibe, aktuell ist), fügen Sie zuerst die jessie-backports Repository, dann

$ sudo apt-get install python-certbot-apache -t jessie-backports

Dies bringt eine Handvoll Pakete plus certbot selbst mit.

Dann, um ein Zertifikat zu erstellen Webroot Modus, laufe so etwas wie

$ sudo certbot certonly --webroot -w /srv/www/www.example.net/htdocs -d www.example.net

Sie können optional hinzufügen --register-unsafely-without-email ebenso gut wie --rsa-key-size X wenn Sie eine andere Modulus-Größe als die Standardgröße (derzeit 2048 Bit) wünschen. -d fqdn.example.com kann beliebig oft wiederholt werden -w; jeder -w Startet eine neue Gruppe von Domains, die aus einem Verzeichnis, Domains genannt, stammen -d. Let's Encrypt gibt keine Wildcard-Zertifikate aus (dies wird in den FAQ erwähnt) und anscheinend auch keine Zertifikate für Punycode-Domainnamen.

Der Benutzer das certbot Läuft als Bedürfnisse, zumindest und standardmäßig, Schreibzugriff auf mehrere Stellen unter /etc/letsencrypt. Es ist wahrscheinlich am einfachsten, es einfach als root auszuführen. Es wird eine Datei unter erstellt .well-known/acme-challenge unter dem angegebenen Web-Stammverzeichnis (-w), habe das Remote-System verifizieren Sie, dass es zugänglich ist über die angegebenen Domänennamen über HTTPund wenn alles ausgecheckt wird, wird eine Reihe von PEM - Dateien erstellt /etc/letsencrypt/archive/www.example.net plus eine entsprechende Menge symbolischer Links in /etc/letsencrypt/live/www.example.net und drucke eine freundliche Erfolgsmeldung.

Wenn alles ausgecheckt ist, müssen Sie Ihren Webserver so einrichten, dass er das Zertifikat verwendet, das im Unterverzeichnis hostname von gefunden wurde /etc/letsencrypt/live für HTTPS für die betreffende Domäne. Das absolute Minimum dafür für Apache ist etwas Ähnliches wie:

<VirtualHost *:443>
        ServerName www.example.net
        SSLEngine on
        SSLCertificateKeyFile /etc/letsencrypt/live/www.example.net/privkey.pem
        SSLCertificateFile /etc/letsencrypt/live/www.example.net/cert.pem
        SSLCertificateChainFile /etc/letsencrypt/live/www.example.net/chain.pem
</VirtualHost>

Fügen Sie nach Bedarf weitere Anweisungen hinzu, verifizieren Sie mit apache2ctl -S und apache2ctl configtest dass alles auscheckt, und aktivieren Sie den virtuellen HTTPS-Host mit apache2ctl graceful.

Vergessen Sie nicht, das Zertifikat regelmäßig zu erneuern. Gegenwärtig verfallen Zertifikate von Let's Encrypt nach 90 Tagen. Das Debian-Paket wird mit einem Cron-Job ausgeliefert /etc/cron.d/certbot und ein Systemdienst in /lib/systemd/system/certbot.service die sich darum kümmern, oder du kannst rennen certbot renew manuell. Erinnere dich an apache2ctl graceful um das neu ausgestellte Zertifikat zu verwenden; Vielleicht möchten Sie den Cron-Job oder Systemd-Service anpassen, um dies automatisch zu tun. Um automatisch erneuerte Zertifikate in Apache auf Debian Jessie zu laden, sollten Sie eine Aktualisierung in Betracht ziehen /lib/systemd/system/certbot.service dem hinzufügen [Service] Abschnitt (Hinweis: Die Reihenfolge ist wichtig):

ExecStartPost=/usr/sbin/apache2ctl configtest
ExecStartPost=/usr/sbin/apache2ctl graceful

Dadurch wird das erneuerte Zertifikat automatisch geladen ob die Apache-Konfigurationsdateien bestehen configtestund listet Certbot als fehlgeschlagene Einheit auf, wenn der configtest oder graceful schlägt fehl.


0
2017-09-08 21:59