Estou tendo problemas para criar um certificado SSL para um site servido pelo Apache. Quando visito https://192.168.0.44
via FireFox, recebo a mensagem de erro:
Websites prove their identity via certificates. Firefox does not trust this site because it uses a certificate that is not valid for 192.168.0.44. The certificate is only valid for 192.168.0.44.
Error code: SSL_ERROR_BAD_CERT_DOMAIN
Aqui estão as etapas para reproduzir o problema.
Requisitos:
- Um computador com sistema operacional Ubuntu no endereço IP
192.168.0.44
. - Um computador com Windows em qualquer
192.168.0.*
endereço.
Passos:
Eu vou para a máquina Ubuntu.
Eu executo este comando:
mkdir -p /etc/certs/test;
Eu crio o arquivo /etc/certs/test/entity.cnf
com o seguinte conteúdo:
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = CA
ST = ON
L = Windsor
O = Ankle
OU = Hello
CN = 192.168.0.44
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = 192.168.0.44
Eu faço um arquivo chamado /etc/certs/test/make-certs.sh
com o seguinte conteúdo.
#!/bin/bash
ORG="ABTEST"
CN="abtest"
certdir="/etc/certs/test"
mkdir -p $certdir;
cd $certdir;
## Create certificate authority
openssl genrsa -out $certdir/ca.key 2048
openssl req -x509 -sha256 -nodes -key $certdir"/ca.key" -subj "/C=CA/ST=ON/O="$ORG"/CN="$CN -days 3650 -out $certdir"/ca.crt"
## Create entity certificate
# Private Key
openssl genrsa -out $certdir/entity.key 2048
# CSR
openssl req -new -sha256 -nodes -key $certdir"/entity.key" -config $certdir"/entity.cnf" -out $certdir"/entity.csr"
# Certificate
openssl x509 -req -in $certdir"/entity.csr" -CA $certdir"/ca.crt" -CAkey $certdir"/ca.key" -CAcreateserial -out $certdir"/entity.crt" -days 500 -sha256 -extensions v3_req -extfile $certdir"/entity.cnf"
Eu executo o comando:
./make-certs.sh
Eu instalo o Apache2 com este comando.
apt-get install -y apache2;
Eu crio um /etc/apache2/sites-available/default-ssl.conf
com este conteúdo:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/certs/test/entity.crt
SSLCertificateKeyFile /etc/certs/test/entity.key
SSLCACertificateFile /etc/certs/test/ca.crt
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Eu executo estes comandos:
a2enmod ssl;
a2ensite default-ssl.conf;
systemctl restart apache2;
Eu executo este comando:
cat /etc/certs/test/ca.crt
Eu copio a saída.
Eu vou para o computador Windows.
Eu colo o conteúdo da área de transferência em um arquivo txt chamado ca.crt
.
Vou para Configurações do FireFox e importo ca.crt
como autoridade de certificação.
Eu visito https://192.168.0.44
com o FireFox.
Vejo a mensagem de erro mencionada no início desta pergunta.
No entanto, não receberei esse erro se repetir as etapas acima, mas alterar apenas três coisas:
Na minha máquina Ubuntu, substituo todas as instâncias de
192.168.0.44
porhello.test.com
no/etc/certs/test/entity.cnf
No meu computador Windows, adiciono a linha
192.168.0.44 hello.test.com
ao arquivoC:\Windows\System32\drivers\etc\hosts
.No meu computador Windows, eu visito
https://hello.test.com
o navegador FireFox.
Com essas 3 alterações, o FireFox mostra um ícone de cadeado verde e diz que tudo sobre meu certificado SSL está perfeito.
Como posso corrigir minha situação para 192.168.0.44
poder usar um certificado verificável e confiável?
Nota adicional:
Isto é o que o FireFox diz quando eu visito https://192.168.0.44
quando o Apache usa um certificado para192.168.0.44