web-dev-qa-db-fra.com

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

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é le /etc/Apache2/sites-available/default-ssl.conf correctement.

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.log Je reçois des avertissements indiquant 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!

25
pixelmusic

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 tutoriel 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 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) 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 =

10
pixelmusic

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.

2
BenjaminBrink

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

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 défini un hôte SSL par défaut 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).

1
symcbean

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
0
Bhoom Suktitipat

J'ai trouvé une solution qui fonctionne pour moi SSL ON CENTOS 8

  1. ouvert nano /etc/httpd/conf.d/ssl.conf
  2. Ajoutez votre SSL dans le ssl.conf fichier
  3. TERMINÉ
SSLCertificateFile /etc/letsencrypt/live/radiolatina.ru/fullchain.pem 

SSLCertificateKeyFile /etc/letsencrypt/live/radiolatina.ru/privkey.pem 
0
Joseph Rodriguez

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

0
Gaius Gracchus