Estoy tratando de configurar SSL en mi servidor web apache2, pero parece que no funciona en absoluto.
He seguido un tutorial para crear archivos cert con openssl y he configurado el /etc/apache2/sites-available/default-ssl.conf
correctamente.
Cada vez que intento abrir mi sitio web con https, mi navegador se niega a conectarse debido a problemas de seguridad. Dice que no he configurado mi sitio web correctamente.
En mi /var/log/apache2/error.log
recibo advertencias, que dicen que mi certificado de servidor no incluye un ID que coincida con el nombre del 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'
¿Tenéis alguna idea de cómo solucionar esto? Gracias de antemano.
Vale, me he dado cuenta de que este post se ve con bastante frecuencia últimamente y parece que mucha gente se enfrenta al mismo problema que yo. Si es así, esto podría ayudarte.
He seguido un sencillo tutorial paso a paso para crear una certificación SSL para mi servidor web. Como muchos tutoriales que hay, el resultado del tutorial que seguí fue un certificado autofirmado usando OpenSSL. Sí autofirmado, ese era el problema. El navegador no podía confiar en el servidor debido a que su certificado estaba firmado por él mismo. Bueno, yo no haría ninguna de las dos cosas...
Un certificado tiene que estar firmado por una autoridad certificadora (CA) externa de confianza. Así que me topé con Let's Encrypt que hace todo el trabajo por ti y es incluso más fácil de configurar y lo mejor es: es absolutamente gratis.
Borra tus viejos archivos de certificados ssl que has creado usando OpenSSL
Abra los backports para obtener el cliente de certbot en Debian. Debe saber que esto abrirá un agujero para el software inacabado. Instale sólo los paquetes cuando sea consciente de lo que está haciendo.
echo 'deb http://ftp.debian.org/debian jessie-backports main' | sudo tee /etc/apt/sources.list.d/backports.list
sudo apt-get update
sudo apt-get install python-certbot-apache -t jessie-backports
sudo nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
. . .
ServerName example.com
ServerAlias www.example.com
. . .
</VirtualHost>
sudo apache2ctl configtest
sudo systemctl restart apache2
sudo certbot --apache
Todos los certificados de Let's Encrypt son válidos durante 3 meses. Para renovarlos puede ejecutar manualmente
sudo certbot renew
O automatizar este servicio como una tarea cron
sudo crontab -e
e introduzca la siguiente fila para invocar una renovación todos los lunes a las 2:30 am.
. . .
30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log
Puede seguir un tutorial más detallado aquí: https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-debian-8
Esos no son errores - son advertencias. Es muy posible ejecutar mod_ssl con un certificado que no coincida con los nombres de servidor definidos, siempre y cuando tenga definido un host ssl por defecto y el nombre común del certificado coincida con el nombre de host utilizado por los clientes para conectarse.
Esto último no parece ser cierto en tu caso. Como dice Jacob, tienes que especificar el nombre de host correcto como nombre común (o un alias) cuando crees un CSR.
Para ver qué nombre(s) están actualmente en el certificado:
openssl s_client -showcerts -connect ${HOSTNAME}:443
Si hay varios certificados instalados en la máquina y servidos en la misma dirección IP, entonces:
openssl s_client -showcerts -connect ${HOSTIP}:443 -servername ${HOSTNAME}
(donde los valores ${...} son marcadores de posición que debe sustituir por los valores correspondientes).