Apache SSL: il server cert non include l'ID che corrisponde al nome del server


21

Sto cercando di impostare SSL sul mio server web apache2, ma sembra che non funzioni affatto.

Ho seguito un tutorial per creare file di certificati con openssl e configurato /etc/apache2/sites-available/default-ssl.confcorrettamente.

Ogni volta che provo ad aprire il mio sito Web con HTTPS, il mio browser si rifiuta di connettersi a causa di problemi di sicurezza. Dice che non ho configurato correttamente il mio sito Web.

Nel mio /var/log/apache2/error.logsto ricevendo avvisi, che dicono che il mio certificato del server non include un ID che corrisponde al nome del server.

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

Hai qualche idea su come risolverlo? Grazie a riguardo!


Stavi usando Apache 2.2 o 2.4? Ho aggiornato da 2.2 a 2.4 e ho riscontrato questo errore. Nel mio caso non è un server pubblico, è un server interno, quindi immagino che lo farà il certificato autofirmato.
svhyd

Stavo usando Apache 2.2 sul mio server pubblico (Debian 8) quando ho riscontrato questo errore. Dopo essere passato a Let's Encript, l'errore era scomparso, quindi immagino che sia stato il certificato autofirmato a causare l'errore.
pixelmusic

Risposte:


7

Ok, ho notato che questo post è stato visto abbastanza spesso di recente e quindi sembra che molte persone stiano affrontando lo stesso problema che ho fatto. Se è così, questo potrebbe aiutarti.

Ho seguito un semplice tutorial passo-passo per creare una certificazione SSL per il mio server web. Come tanti tutorial là fuori, il risultato del tutorial che ho seguito è stato un certificato autofirmato che utilizza OpenSSL. Yep auto-firmato , che era il problema. Il browser non ha potuto fidarsi del server a causa del suo certificato che è firmato da solo. Beh, non farei neanche ...

Un certificato deve essere firmato da un'autorità di certificazione esterna (CA). Quindi mi sono imbattuto in Let's Encrypt che fa tutto il lavoro per te ed è ancora più facile da configurare e il migliore è: è assolutamente gratuito.

Installazione

1) Elimina i tuoi vecchi file ssl cert che hai creato usando OpenSSL

2) Apri i backport per ottenere il client certbot su Debian. Dovresti sapere che questo aprirà un buco per il software incompiuto! Installa solo i pacchetti quando sei consapevole di ciò che stai facendo.

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

3) Aggiorna il tuo sistema linux

sudo apt-get update

4) Installa certbot

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

5) Configura apache ServerName e ServerAlias

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

6) Modifica il file di configurazione di apache

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

7) Verificare la sintassi corretta

sudo apache2ctl configtest

8) Se il file di configurazione sembra a posto, riavvia il server apache

sudo systemctl restart apache2

9) Imposta un certificato usando certbot e segui le istruzioni sullo schermo.

sudo certbot --apache

Rinnovo

Tutti i certificati di Let's Encrypt sono validi per 3 mesi. Per rinnovare è possibile eseguire manualmente

sudo certbot renew

O automatizza questo servizio come cron job

sudo crontab -e

e inserisci la riga seguente per invocare un rinnovo ogni lunedì alle 2:30.

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

Puoi seguire un tutorial più dettagliato qui: https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-debian-8


Questo non può essere usato per localhost (macchina virtuale su rete locale), intendo che devi acquistare un dominio per usare, crittografiamo giusto?
lewis4u,

1
sì, il tuo webserver deve essere accessibile attraverso un dominio registrato affinché la crittografia funzioni.
pixelmusic,

2

Se non vedi altri errori SSL e se hai provato a impostare "Debug LogLevel" nel file httpd.conf, questo messaggio di errore può anche suggerire che "Listen 443" non è presente nel file httpd.conf.


dimentico totalmente di far ascoltare ad Apache il 443 che stava ascoltando solo 80 grazie
Robert

1

Questi non sono errori - sono avvertimenti. È possibile eseguire mod_ssl con un certificato che non corrisponde ai nomi dei server definiti purché sia ​​definito un host ssl predefinito e il nome comune sul certificato corrisponda al nome host utilizzato dai client per connettersi.

Quest'ultimo non sembra essere vero nel tuo caso. Come dice Jacob, è necessario specificare il nome host corretto come nome comune (o alias) quando si crea un CSR .

Per vedere quali nomi sono attualmente sul certificato:

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

Se sul computer sono installati più certificati e offerti sullo stesso indirizzo IP, allora:

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

(dove i valori $ {...} sono segnaposto, è necessario sostituirli con i valori pertinenti).


(1) dovresti inserire il nome del server in CommonName in CSR, ma se è effettivamente necessario (se la CA lo controlla e / o lo copia) dipende dalla CA (2) openssl s_clientmostra soggetto ed emittente per il certificato foglia, che è l'unico hai bisogno qui, senza -showcerts, ma per i certificati di autentica CA dal 2010 circa (e certificati DIY da persone competenti ) ciò che devi guardare non è soggetto ma l'estensione SubjectAltName (SAN) e per quello che ti serveopenssl s_client -connect h:p [-servername h] | openssl x509 -noout -text
dave_thompson_085

Si noti che dalla metà del 2018, è necessario specificare il nome DNS anche nei nomi alternativi soggetto se si desidera che il certificato venga convalidato correttamente nei browser moderni.
symcbean

Non conosco alcun cambiamento nel 2018; Chrome ha richiesto SAN (per DNS o IP, sebbene quest'ultimo sia usato raramente) dall'inizio del 2017, e Firefox e IE (che continuo a considerare moderni) non lo richiedono oggi, anche se, come ho già detto, le CA pubbliche hanno fornito molto più a lungo.
dave_thompson_085

0

Ho riscontrato questo problema di recente, quando il mio certificato autofirmato è scaduto. Ho cercato su Google e ho appena copiato il comando per creare un nuovo certificato da un sito web.

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

Nel mio file di configurazione di apache: /etc/apache2/sites-available/default-ssl.conf. Il file del certificato e il file chiave si riferiscono al seguente nome file.

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

Quindi, l'errore visualizzato qui nel mio caso è stato una correzione più semplice, semplicemente fornendo la posizione corretta del file della chiave del certificato durante la creazione del certificato ssl.

Quindi, ecco il comando che avrei dovuto usare e digitato correttamente.

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

0

Nel mio caso ho risolto questo problema sostituendo il mio file di configurazione aps ssl per ogni dominio interessato:

ServerName mydomain.com
ServerAlias www.mydomain.com

di:

ServerName www.mydomain.com
ServerAlias mydomain.com

Perché il mio certificato è per "www.mydomain.com" e non per "mydomain.com"

file apache completo:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin noreply@mydomain.com
        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>

0

Abbiamo dovuto aggiungere ServerName e ServerAlias ​​al file ssl predefinito, non solo al file conf per il dominio specifico.
Questo ci ha sbarazzato del fastidioso errore per noi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.