5 votes

Comment puis-je utiliser Let's Encrypt (letsencrypt.org) comme fournisseur de certificats SSL gratuits ?

J'ai quelques sites qui fonctionnent avec un certificat gratuit StartSSL ( CJSHayward.com , JobhuntTracker.com ), et Firefox rejette StartSSL et affiche une page d'erreur indiquant que mon serveur n'est pas correctement configuré (IIRC) à cause de la chaîne de certificats. J'ai demandé de l'aide et confirmé que mon VirtualHost (disponible sur demande) était pour la chaîne de certificats et que j'avais le certificat intermédiaire installé correctement. Les sites s'affichent sans erreur à ma connaissance dans Chrome, Safari, Edge ou Opera.

Après quelques recherches, Cryptons ! semblait être une offre attrayante, et avant longtemps j'avais (AFAICT) une clé privée et un certificat pour chaque domaine sous /etc/apache2/sites-enabled, moins bien sûr tous les domaines qui ne sont plus les miens. Je me suis dit que j'allais faire un essai et établir une connexion HTTPS à un site qui n'est maintenant disponible que sous HTTP : JSH.nom . J'ai déplacé le certificat et la clé privée "Let's Encrypt !" dans mon répertoire SSL et j'ai ajouté :

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

Puis j'ai redémarré pour voir mon travail, et toutes les requêtes HTTP ou HTTPS que j'ai faites se sont simplement bloquées. Cela incluait deux domaines en HTTPS avec mon certificat StartSSL, et le domaine qui aurait dû être nouvellement disponible en HTTPS accédé à la fois par HTTP et HTTPS. J'ai commenté le VirtualHost et fait rebondir Apache, et toutes les anciennes fonctionnalités étaient de nouveau en état de marche.

Ai-je utilisé Let's "Encrypt !" correctement ? Je suis légèrement suspicieux car la configuration SSL existante possède des clés privées avec une extension .key, un certificat avec une extension .crt et un fichier de chaîne de certificats avec une extension .pem.

J'ai réessayé après avoir vérifié le répertoire SSL et constaté que 0000_csr.letsencrypt.pem était en mode 644 ; j'ai changé tous les fichiers de ce répertoire en mode 600. Lorsque j'ai essayé il y a un instant, j'ai obtenu une répétition de l'ancien comportement : le site web se bloque sur toutes les demandes et, en plus, un message d'erreur apachectl restart obtient une déclaration (j'ai oublié la formulation exacte) indiquant que httpd n'est pas en cours d'exécution et que l'ordinateur essaie de le démarrer.

Comment puis-je obtenir des certificats gratuits fonctionnels pour "Let's Encrypt" ou un autre outil qui n'a pas aliéné Firefox ?

Un site apachectl -v donne :

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

A uname -a donne :

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

--UPDATE--

Contenu supprimé, 0000_key-letsencrypt.pem est délimité par :

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

Une recherche sur la hiérarchie des répertoires donne.. :

root@www:/etc/letsencrypt# find \`pwd\` -print
/etc/letsencrypt
/etc/letsencrypt/keys
/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/renewal
/etc/letsencrypt/options-ssl-apache.conf
/etc/letsencrypt/csr
/etc/letsencrypt/csr/0000\_csr-letsencrypt.pem

Le répertoire /home/jonathan/stornge et son contenu sont lisibles et exécutables dans le monde entier, là où cela fait une différence.

--UPDATE--

J'ajoute quelque chose de substantiel ici :

El http://OrthodoxChurchFathers.com Le fichier conf d'Apache a deux VirtualHosts, un pour servir http://OrthodoxChurchFathers.com et un autre pour rediriger http://www.OrthodoxChurchFathers.com demandes à http://OrthodoxChurchFathers.com . Le fichier .conf qui abrite les deux VirtualHosts est le suivant :

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

When I try to run it and request orthodoxchurchfathers.com alone, I get:

    We were unable to find a vhost with a ServerName or Address of         
    orthodoxchurchfathers.com.                                             
    Which virtual host would you like to choose?                           
    (note: conf files with multiple vhosts are not yet supported)          

    1   008-stornge.conf               | Multiple Names        |         
    2   014-paraskeva.conf             | paraskeva.jonathansco |         
    3   036-unixytalk.conf             | unixtalk.jsh.name     |         
    4   038-proxy.conf                 | Multiple Names        |         
    5   027-anna.conf                  | Multiple Names        |         
    6   044-jobhunt-tracker.creation.c | Multiple Names        |         
    7   049-jsh.conf                   | Multiple Names        |         
    8   001-steampunk.conf             |                       |         
    9   006-blajeny.conf               | Multiple Names        |         
    10  032-videos.conf                | Multiple Names        |     d   
    (+)30%   

The command I used was with ./letsencrypt-auto --debug certonly .

5 votes

Le nom du fichier 0000_csr-letsencrypt.pem suggère que vous avez inclus la demande de signature du certificat, et non le certificat signé. Chaque fichier dont vous avez besoin devrait se trouver dans un sous-répertoire de /etc/letsencrypt/live avec votre nom de domaine. et un numéro de série, vous n'avez besoin de rien de /etc/letsencrypt/csr ou keys Avez-vous des entrées dans le fichier journal ?

0 votes

Est-ce que Apache a le droit de lire /home/jonathan/stornge ?

4voto

bigmattyh Points 9167

J'ai écrit une paire de how-tos pour l'exécution de Let's Encrypt SSL certs sur CentOS : configuration initiale & la mise en place d'un système de cronométrie .

Et mes fichiers par domaine (j'utilise la convention d'appellation de fichier de z-<[sub-]domain-tld>.conf ) Les fichiers de configuration d'Apache ressemblent à ceci :

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

Et mon ssl.conf ressemble à ceci :

#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

Utiliser Let's Encrypt pour obtenir des certificats SSL (et faire en sorte que votre site obtienne la note "A" de la part de l'organisme de certification). Laboratoires SSL ) est assez simple, une fois que l'on a dépassé les arcanes des configurations Apache et des arguments de la ligne de commande LE.

1voto

user Points 4207

J'ai obtenu de bons résultats en utilisant le programme de l'EFF Certbot en mode racine web (parce que l'idée qu'un processus automatisé arrête le serveur web, ne serait-ce que brièvement, pendant le renouvellement du certificat me fait peur).

Tout d'abord, installez Certbot. Si vous êtes sous Debian Jessie (qui est la version actuelle au moment où j'écris ces lignes), ajoutez d'abord le fichier jessie-backports le dépôt, alors

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

Cela apportera une poignée de paquets plus certbot lui-même.

Ensuite, pour créer un certificat dans webroot exécutez quelque chose comme

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

Vous pouvez éventuellement ajouter --register-unsafely-without-email ainsi que --rsa-key-size X si vous souhaitez une taille de module différente de celle par défaut (qui est actuellement de 2048 bits). -d fqdn.example.com peut être répétée un nombre arbitraire de fois, de même que -w ; chaque -w démarre un nouvel ensemble de domaines servis à partir d'un répertoire, domaines nommés par -d . Let's Encrypt n'émet pas de certificats wildcard (cela est mentionné dans leur FAQ) et apparemment, pas non plus de certificats pour les noms de domaine Punycode.

L'utilisateur qui certbot fonctionne comme nécessite, au minimum et par défaut, un accès en écriture à plusieurs endroits sous /etc/letsencrypt . Il est probablement plus facile de l'exécuter en tant que root. Il créera un fichier sous .well-known/acme-challenge sous le répertoire racine du site web donné ( -w ), faites en sorte que le système distant vérifier qu'il est accessible sur les noms de domaine spécifiés sur HTTP et si tout se passe bien, il créera un tas de fichiers PEM dans le répertoire de l'entreprise. /etc/letsencrypt/archive/www.example.net plus un ensemble correspondant de liens symboliques dans /etc/letsencrypt/live/www.example.net et imprimer un message de succès amical.

Si tout est en ordre, il ne vous reste plus qu'à configurer votre serveur web pour qu'il utilise le certificat trouvé dans le sous-répertoire du nom d'hôte de l'application /etc/letsencrypt/live pour HTTPS pour le domaine en question. Le minimum absolu pour cela pour Apache est quelque chose de similaire à :

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

Ajoutez d'autres directives si vous le souhaitez, vérifiez en utilisant apache2ctl -S y apache2ctl configtest que tout est vérifié, et activer l'hôte virtuel HTTPS avec apache2ctl graceful .

N'oubliez pas de renouveler régulièrement le certificat ; actuellement, les certificats Let's Encrypt expirent après 90 jours. Le paquet Debian est fourni avec une tâche cron dans le fichier /etc/cron.d/certbot et un service systemd dans /lib/systemd/system/certbot.service qui s'occupent de cela, ou vous pouvez exécuter certbot renew manuellement. N'oubliez pas de apache2ctl graceful pour commencer à utiliser le certificat nouvellement émis ; vous pouvez ajuster la tâche cron ou le service systemd pour que cela se fasse automatiquement. Pour charger automatiquement des certificats renouvelés dans Apache sur Debian Jessie, pensez à mettre à jour /lib/systemd/system/certbot.service à ajouter à la [Service] (remarque : l'ordre est important) :

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

Ce faisant, le certificat renouvelé sera automatiquement chargé si les fichiers de configuration d'Apache passent configtest et de répertorier Certbot comme une unité défaillante si l'option configtest o graceful échoue.

1voto

Tim Points 28848

J'ai trouvé le client ACME fonctionne bien, il est facile à configurer et à lancer, il est mis à jour régulièrement et est facile à mettre à jour, et il fonctionne très bien sur Amazon Linux. J'ai écrit un tutoriel à ce sujet que vous pouvez trouver à l'adresse suivante aquí .

Pour commencer, téléchargez ACME et configurez-le.

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

Demander un certificat

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

Voici comment j'ai configuré le répertoire pour le défi - c'est là que Let's Encrypt se connecte à votre serveur pour valider.

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)

Vous trouverez plus de détails et de commentaires sur le site Web mentionné ci-dessus, et l'auteur et la communauté sont très utiles.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X