SSL Apache: le certificat du serveur n'inclut pas l'ID correspondant au nom du serveur

21

J'essaie de configurer SSL sur mon serveur Web apache2, mais il semble que cela ne fonctionne pas du tout.

J'ai suivi un tutoriel pour créer des fichiers cert avec openssl et configuré /etc/apache2/sites-available/default-ssl.confcorrectement.

Chaque fois que j'essaie d'ouvrir mon site Web avec https, mon navigateur refuse de se connecter en raison de problèmes de sécurité. Il indique que je n'ai pas configuré correctement mon site Web.

Dans mon /var/log/apache2/error.logmessage, je reçois des avertissements qui indiquent que mon certificat de serveur n'inclut pas d'ID correspondant au nom du serveur.

[Mon Apr 10 11:03:24.041813 2017] [mpm_prefork:notice] [pid 1222] AH00169: caught SIGTERM, shutting down
[Mon Apr 10 11:03:30.566578 2017] [ssl:warn] [pid 661] AH01909: 127.0.0.1:443:0 server certificate does NOT include an ID which matches the server name
[Mon Apr 10 11:03:31.579088 2017] [ssl:warn] [pid 1194] AH01909: 127.0.0.1:443:0 server certificate does NOT include an ID which matches the server name
[Mon Apr 10 11:03:31.592958 2017] [mpm_prefork:notice] [pid 1194] AH00163: Apache/2.4.25 (Raspbian) OpenSSL/1.0.2k configured -- resuming normal operations
[Mon Apr 10 11:03:31.593136 2017] [core:notice] [pid 1194] AH00094: Command line: '/usr/sbin/apache2'

Avez-vous des idées sur la façon de résoudre ce problème? Merci à tous!

pixelmusic
la source
Avez-vous utilisé Apache 2.2 ou 2.4? J'ai mis à niveau la version 2.2 vers la version 2.4 et j'ai obtenu cette erreur. Dans mon cas, ce n'est pas un serveur public, c'est un serveur interne, donc je suppose que le certificat auto-signé fera l'affaire.
svhyd
J'utilisais Apache 2.2 sur mon serveur public (Debian 8) lorsque j'ai eu cette erreur. Après le passage à Let's Encript, l'erreur a disparu, donc je suppose que c'est le certificat auto-signé qui a causé l'erreur.
pixelmusic

Réponses:

7

D'accord, j'ai remarqué que ce message est vu assez souvent récemment et il semble donc que beaucoup de gens sont confrontés au même problème que moi. Si c'est le cas, cela pourrait vous aider.

J'ai suivi un didacticiel simple étape par étape pour créer une certification SSL pour mon serveur Web. Comme tant de tutoriels, le résultat du tutoriel que j'ai suivi était un certificat auto-signé utilisant OpenSSL. Oui, auto-signé , c'était ça le problème. Le navigateur n'a pas pu faire confiance au serveur en raison de son certificat signé par lui-même. Et bien je ne ferais pas non plus ...

Un certificat doit être signé par une autorité de certification (CA) digne de confiance externe. Je suis donc tombé sur Let's Encrypt qui fait tout le travail pour vous et est encore plus facile à configurer et le meilleur est: c'est absolument gratuit.

Installation

1) Supprimez vos anciens fichiers cert SSL que vous avez créés en utilisant OpenSSL

2) Ouvrez les backports pour obtenir le client certbot sur Debian. Vous devez savoir que cela ouvrira un trou pour les logiciels inachevés! Installez uniquement les packages lorsque vous savez ce que vous faites.

echo 'deb http://ftp.debian.org/debian jessie-backports main' | sudo tee /etc/apt/sources.list.d/backports.list

3) Mettez à jour votre système Linux

sudo apt-get update

4) Installez certbot

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

5) Configurer apache ServerName et ServerAlias

sudo nano /etc/apache2/sites-available/000-default.conf

6) Modifier le fichier de configuration apache

<VirtualHost *:80>
    . . .
    ServerName example.com
    ServerAlias www.example.com
    . . .
</VirtualHost>

7) Vérifiez la syntaxe correcte

sudo apache2ctl configtest

8) Si le fichier de configuration semble correct, redémarrez le serveur apache

sudo systemctl restart apache2

9) Configurez un certificat à l'aide de certbot et suivez les instructions à l'écran.

sudo certbot --apache

Renouvellement

Tous les certificats de Let's Encrypt sont valables 3 mois. Pour renouveler le, vous pouvez exécuter manuellement

sudo certbot renew

Ou automatisez ce service en tant que tâche cron

sudo crontab -e

et entrez la ligne suivante pour invoquer un renouvellement tous les lundis à 2h30.

. . .
30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log

Vous pouvez suivre un tutoriel plus détaillé ici: https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-debian-8

pixelmusic
la source
Cela ne peut pas être utilisé pour localhost (machine virtuelle sur le réseau local), je veux dire que vous devez acheter un domaine à utiliser, chiffrons-nous non?
lewis4u
1
oui, votre serveur web doit être accessible via un domaine enregistré pour que le cryptage fonctionne.
pixelmusic
2

Si vous ne voyez aucune autre erreur SSL et si vous avez essayé de définir «débogage LogLevel» dans le fichier httpd.conf, ce message d'erreur peut également suggérer que «Listen 443» est manquant dans le fichier httpd.conf.

BenjaminBrink
la source
j'ai totalement oublié de faire écouter Apache à 443 il n'écoutait que 80 merci
Robert
1

Ce ne sont pas des erreurs - ce sont des avertissements. Il est tout à fait possible d'exécuter mod_ssl avec un certificat qui ne correspond pas aux noms de serveur définis tant que vous avez un hôte ssl par défaut défini et que le nom commun sur le certificat correspond au nom d'hôte utilisé par les clients pour se connecter.

Ce dernier ne semble pas être vrai dans votre cas. Comme Jacob le dit, vous devez spécifier le nom d'hôte correct comme nom commun (ou un alias) lorsque vous créez un CSR .

Pour voir quel (s) nom (s) figure actuellement sur le certificat:

openssl s_client -showcerts -connect ${HOSTNAME}:443

Si plusieurs certificats sont installés sur la machine et servis sur la même adresse IP, alors:

openssl s_client -showcerts -connect ${HOSTIP}:443 -servername ${HOSTNAME}

(où les valeurs $ {...} sont des espaces réservés que vous devez remplacer par les valeurs pertinentes).

symcbean
la source
(1) , vous devez mettre le nom du serveur dans CommonName dans la RSE, mais si elle est réellement nécessaire (si des contrôles CA et / ou le copie) dépend du CA (2) openssl s_clientmontre le sujet et émetteur pour le cert des feuilles, qui est le seul vous avez besoin ici, sans -showcerts, mais pour les certificats réels depuis environ 2010 (et les certificats de bricolage par des personnes compétentes ) ce que vous devez regarder n'est pas sujet mais l'extension SubjectAltName (SAN) et pour cela, vous avez besoinopenssl s_client -connect h:p [-servername h] | openssl x509 -noout -text
dave_thompson_085
Notez qu'à partir de la mi-2018, vous devez également spécifier le nom DNS dans les autres noms de sujet si vous souhaitez que votre certificat soit correctement validé dans les navigateurs modernes.
symcbean
Je ne connais aucun changement en 2018; Chrome a besoin d'un SAN (pour DNS ou IP, bien que ce dernier soit rarement utilisé) depuis début 2017, et Firefox et IE (que je considère toujours comme moderne) ne l'exigent pas aujourd'hui - bien que, comme je l'ai dit précédemment, les autorités de certification publiques aient fourni beaucoup plus longtemps.
dave_thompson_085
0

J'ai rencontré ce problème récemment, lorsque mon certificat auto-signé a expiré. J'ai recherché sur Google et copié la commande de création d'un nouveau certificat à partir d'un site Web.

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/apache2/ssl/apache.crt

Dans mon fichier de configuration apache: /etc/apache2/sites-available/default-ssl.conf. Le fichier de certificat et le fichier de clé font référence au nom de fichier suivant.

    SSLCertificateFile  /etc/apache2/ssl/apache.crt
    SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Par conséquent, l'erreur vue ici dans mon cas était plus facile à corriger, simplement en fournissant l'emplacement correct du fichier de clé de certificat lors de la création du certificat SSL.

Voici donc la commande que j'aurais dû utiliser et taper correctement.

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
Bhoom Suktitipat
la source
0

Dans mon cas, j'ai résolu ce problème en le remplaçant dans mon fichier de configuration apache ssl pour chaque domaine concerné:

ServerName mydomain.com
ServerAlias www.mydomain.com

par :

ServerName www.mydomain.com
ServerAlias mydomain.com

Parce que mon certificat est pour "www.mydomain.com" et non pour "mydomain.com"

fichier apache complet:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin [email protected]
        ServerName www.mydomain.com
        ServerAlias mydomain.com
    DocumentRoot /home/mydomain.com/public_html
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|ico|png)$ \ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ \no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

    <Directory />
        Options +FollowSymLinks
        AllowOverride All
    </Directory>
    <Directory /home/mydomain.com/public_html>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride All
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>


ErrorLog ${APACHE_LOG_DIR}/error.log

LogLevel warn
SSLCertificateFile /etc/letsencrypt/live/www.mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
user2267379
la source
0

Nous avons dû ajouter le ServerName et ServerAlias ​​au fichier default-ssl, pas seulement le fichier conf pour le domaine spécifique.
Cela nous a débarrassé de l'erreur embêtante.

Gaius Gracchus
la source