Apache SSL: o certificado do servidor não inclui o ID que corresponde ao nome do servidor

21

Estou tentando configurar o SSL no meu servidor web apache2, mas parece que ele não funciona.

Eu segui um tutorial para criar arquivos cert com o openssl e configurei /etc/apache2/sites-available/default-ssl.confcorretamente.

Sempre que tento abrir meu site com https, meu navegador se recusa a se conectar devido a problemas de segurança. Ele diz que não configurei meu site corretamente.

No meu /var/log/apache2/error.log, estou recebendo avisos, que dizem que meu certificado de servidor não inclui um ID que corresponda ao nome do servidor.

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

Você tem alguma idéia de como resolver isso? Obrigado em relação!

pixelmusic
fonte
Você estava usando o Apache 2.2 ou 2.4? Atualizei de 2.2 para 2.4 e obtendo este erro. No meu caso, não é um servidor público, é um servidor interno, então acho que o certificado autoassinado funcionará.
svhyd
Eu estava usando o Apache 2.2 no meu servidor público (Debian 8) quando recebi esse erro. Depois de mudar para o Let's Encript, o erro desapareceu, então acho que foi o certificado autoassinado que causou o erro.
Pixelmusic #

Respostas:

7

Ok, notei que este post é visto com bastante frequência recentemente e, portanto, parece que muitas pessoas estão enfrentando o mesmo problema que eu. Nesse caso, isso pode ajudá-lo.

Eu segui um tutorial passo a passo simples para criar uma certificação SSL para meu servidor da web. Como muitos tutoriais por aí, o resultado do tutorial que segui foi um certificado autoassinado usando o OpenSSL. Sim, auto-assinado , esse era o problema. O navegador não pode confiar no servidor devido ao seu certificado assinado por ele mesmo. Bem, eu também não faria ...

Um certificado deve ser assinado por uma autoridade de certificação confiável externa. Então me deparei com Let's Encrypt, que faz todo o trabalho para você e é ainda mais fácil de configurar e o melhor é: é totalmente gratuito.

Instalação

1) Exclua os arquivos de certificado SSL antigos que você criou usando o OpenSSL

2) Abra backports para obter o cliente certbot no Debian. Você deve saber que isso abrirá um buraco para o software inacabado! Instale apenas os pacotes quando estiver ciente do que está fazendo.

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

3) Atualize seu sistema linux

sudo apt-get update

4) Instale o certbot

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

5) Configure o apache ServerName e ServerAlias

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

6) Edite o arquivo de configuração do apache

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

7) Verifique se há uma sintaxe correta

sudo apache2ctl configtest

8) Se o arquivo de configuração estiver bom, reinicie o servidor apache

sudo systemctl restart apache2

9) Configure um certificado usando o certbot e siga as instruções na tela.

sudo certbot --apache

Renovação

Todos os certificados de Let's Encrypt são válidos por três meses. Para renovar, você pode executar manualmente

sudo certbot renew

Ou automatize esse serviço como um trabalho cron

sudo crontab -e

e insira a linha a seguir para chamar uma renovação toda segunda-feira às 02:30.

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

Você pode seguir um tutorial mais detalhado aqui: https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-debian-8

pixelmusic
fonte
Isso não pode ser usado para o host local (máquina virtual na rede local), ou seja, você precisa comprar um domínio para usar, vamos criptografar, certo?
lewis4u 03/06
1
sim, seu servidor da web precisa estar acessível através de um domínio registrado para que o criptografar funcione.
pixelmusic 26/06
2

Se não houver outros erros de SSL e se você tiver tentado definir 'LogLevel debug' no arquivo httpd.conf, essa mensagem de erro também poderá sugerir que 'Listen 443' está ausente no arquivo httpd.conf.

BenjaminBrink
fonte
i totalmente esqueça de fazer Apache ouvir 443 só estava ouvindo 80 graças
Robert
1

Esses não são erros - são avisos. É bem possível executar mod_ssl com um certificado que não corresponda aos nomes de servidor definidos, desde que você tenha um host ssl padrão definido e o nome comum no certificado corresponda ao nome do host usado pelos clientes para se conectar.

O último não parece ser verdade no seu caso. Como Jacob diz, você precisa especificar o nome do host correto como o nome comum (ou um alias) ao criar um CSR .

Para ver quais nomes estão atualmente no certificado:

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

Se houver vários certificados instalados na máquina e exibidos no mesmo endereço IP, então:

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

(onde os valores de $ {...} são espaços reservados, você deve substituir pelos valores relevantes).

symcbean
fonte
(1) você deve colocar o nome do servidor em CommonName no CSR, mas se ele é realmente necessário (se a CA verifica e / ou copia) depende da autoridade de certificação (2) openssl s_clientmostra o assunto e o emissor do certificado em folha, que é o único você precisa aqui, sem -showcerts, mas para certificados de CA reais desde cerca de 2010 (e certificados de bricolage por pessoas competentes ) o que você precisa olhar não é assunto, mas a extensão SubjectAltName (SAN) e para o que você precisaopenssl s_client -connect h:p [-servername h] | openssl x509 -noout -text
dave_thompson_085
Observe que, a partir de meados de 2018, você também precisará especificar o nome DNS nos nomes alternativos do assunto, se desejar que seu certificado seja validado corretamente nos navegadores modernos.
symcbean
Não conheço nenhuma mudança em 2018; O Chrome exige SAN (para DNS ou IP, embora este último raramente seja usado) desde o início de 2017, e o Firefox e o IE (que ainda considero modernos) não o exigem hoje - embora, como afirmei anteriormente, as CAs públicas tenham fornecido por muito mais tempo.
dave_thompson_085
0

Encontrei esse problema recentemente, quando meu certificado autoassinado expirou. Pesquisei no Google e apenas copiei o comando para criar um novo certificado a partir de um site.

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

No meu arquivo de configuração do apache: /etc/apache2/sites-available/default-ssl.conf. O arquivo de certificado e o arquivo de chave referem-se ao seguinte nome de arquivo.

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

Portanto, o erro visto aqui no meu caso foi mais fácil de corrigir, fornecendo o local correto do arquivo de chave do certificado ao criar o certificado SSL.

Então, aqui está o comando que eu deveria ter usado e digitado corretamente.

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

No meu caso, resolvi isso substituindo no meu arquivo de configuração apache ssl para cada domínio em questão:

ServerName mydomain.com
ServerAlias www.mydomain.com

de :

ServerName www.mydomain.com
ServerAlias mydomain.com

Porque meu certificado é para "www.meudominio.com" e não para "meudominio.com"

arquivo apache completo:

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

Tivemos que adicionar o ServerName e ServerAlias ​​ao arquivo ssl padrão, não apenas o arquivo conf para o domínio específico.
Isso se livrou do erro traquina para nós.

Gaius Gracchus
fonte