
Quiero probar mi aplicación web en https localhost. Lamentablemente, parece imposible eliminar la advertencia de certificado de Chrome. Primero, generé el certificado así:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/localhost-selfsigned.key -out /etc/ssl/certs/localhost-selfsigned.crt
Luego quise agregarlo a Chrome, configuración > avanzado > administrar certificados -> importar. Intento importar el archivo .crt generado antes y todo lo que obtengo es esto:
Error de importación del certificado: falta la clave privada de este certificado de cliente o no es válida.
Lo busqué en Google, pero no encontré nada útil.
También intenté habilitar el indicador enable-insecure-localhost y abrir Chrome, --ignore-certificate-errors
pero todavía muestra la advertencia y https roto.
¿Existen otras formas o estoy haciendo algo mal con el certificado?
Respuesta1
Creo que lo que quizás esté intentando hacer es agregarlo al almacén de certificados incorrecto. Si intentas agregarlo en "Tus certificados", lo pasarás mal. Esa pestaña es para agregar certificados de identidad; lo que su navegador ofrece al servidor para establecer la identidad del navegador.
Lo que creo que quiere hacer, según su descripción, es que su navegador confíe en el certificado autofirmado que estará en su servidor. Si ese es el caso, debes agregarlo en la pestaña "Autoridades".
Respuesta2
Lo que funcionó para mí fue
- configurar una CA
- firmar mi propio certificado usando esta CA y luego
- importando la clave CA a Chrome (Autoridades).
Recibí el procedimiento deesteresponder en SO.
Dado que mi problema específico era atender subdominios multinivel, lo veré desde ese ángulo.
subdominios:
- bar.fooz.midominio.com
- foo.fooz.midominio.com
- Conviértase en una autoridad certificadora
export CA=myca
# you probably want to have this in its own directory
mdkir /etc/ssl/$CA && cd /etc/ssl/$CA
# generate private key
openssl genrsa -des3 -out $CA.key 2048
# generate root certificate
openssl req -x509 -new -nodes -key $CA.key -sha256 -days 825 -out $CA.pem
- Crear certificados firmados por CA
export NAME=fooz.mydomain.com
# if CA files were in a separate directory
cd .. && mkdir /etc/ssl/$NAME && cd /etc/ssl/$NAME
# generate private key
openssl genrsa -out $NAME.key 2048
# Create a certificate-signing request
# Once prompted, set FQDN to the value of $NAME
openssl req -new -key $NAME.key -out $NAME.csr
# Create a config file for the extensions
>$NAME.ext cat <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = $NAME # Be sure to include the domain name here because Common Name is not so commonly honoured by itself
# Optionally, add additional domains (I've added a subdomain here)
DNS.2 = foo.$NAME
DNS.3 = bar.$NAME
IP.1 = 192.168.0.13 # (Optional, but probably important), add an IP address (if the connection which you have planned requires it)
EOF
# Create the signed certificate
openssl x509 -req -in $NAME.csr -CA $CA.pem -CAkey $CA.key -CAcreateserial -out $NAME.crt -days 825 -sha256 -extfile $NAME.ext
- Descargue el
$CA.pem
archivo e impórtelo como Autoridad en su navegador:
1. Chrome settings (Settings > Privacy and Security > Security > Manage certificates > Authorities > Import). Check Trust this certificate for identifying websites
2. Firefox: Preferences > Privacy and Security > Certificates > View Certificates > Authorities > import. Check Trust this CA to identify websites
- Reinicie su navegador (Firefox funcionó sin necesidad de reiniciar)
Respuesta3
Chrome espera un archivo en formato PKCS12 que se utiliza para almacenar el certificado, cualquier certificado intermedio y la clave privada en un único archivo cifrable. Estos archivos suelen tener las extensiones .p12
y .pfx
.
Para generar uno use el siguiente comando
openssl pkcs12 -export -inkey ./sample.key -in ./sample.crt -out ./sample.p12
Este comando solicitará una contraseña que debemos recordar y usar al importar el p12
archivo generado a Chrome.