Tengo un servidor de intranet y necesito instalar un SSL.
Este es elopenssl.cnf
[ req ]
default_md = sha256
distinguished_name = req_distinguished_name
attributes = req_attributes
req_extensions = req_ext
#prompt = no
[ req_distinguished_name ]
countryName = US
countryName_min = 2
countryName_max = 2
stateOrProvinceName = CHICAGO
localityName = CHICAGO
0.organizationName = MY COMPANY
organizationalUnitName = IOS DEVELOPMENT
commonName = server2.myserver.local
commonName_max = 64
emailAddress = [email protected]
emailAddress_max = 64
[ req_attributes ]
challengePassword = password
challengePassword_min = 4
challengePassword_max = 20
[ req_ext ]
subjectAltName = @alt_names
extendedKeyUsage = serverAuth
[alt_names]
DNS.1 = server2.myserver.local
DNS.2 = myserver.local
Estos son los comandos que estoy usando para crearlo.
generando la clave CA raíz
openssl genrsa -des3 -out rootCA.key 4096
2.esto está generando el certificado de CA raíz
openssl req \
-x509 -new -nodes \
-key rootCA.key -sha256 \
-days 825 \
-out rootCA.crt \
-subj /CN=server2.myserver.local \
-reqexts SAN \
-extensions SAN \
-config <(cat ./openssl.cnf \
<(printf '[SAN]\nsubjectAltName=DNS:server2.myserver.local')) \
-extensions 'req_ext'
generando la clave del certificado
openssl genrsa -out mydomain.com.key 4096
generando el certificado
openssl req -new -sha256 -key mydomain.com.key \ -subj "/C=US/ST=CA/O=MyOrg, Inc./CN=server2.myserver.local" \ -reqexts SAN \ -config <(cat ./openssl.cnf \ <(printf "\n[SAN]\nsubjectAltName=DNS:server2.myserver.local,DNS:myserver.local")) \ -out mydomain.com.csr
convertir el certificado CA a p12
openssl pkcs12 -export -out ca.p12 -inkey rootCA.key -in rootCA.crt
convirtiendo el certificado a p12
openssl pkcs12 -export -out certificate.p12 -inkey mydomain.com.key -in mydomain.com.crt
Luego instalo ca.p12
y certificate.p12
en mi servidor IIS y en mis dispositivos.
Cuando trato de visitarserver2.myserver.local
yo obtengo
¿Cómo, en nombre de Saint Certificate, hago eso?
Respuesta1
Yo diría que su certificado de CA raíz es completamente incorrecto. Los certificados de CA son muy diferentes de los certificados TLS del host final: no se puede utilizar la misma configuración para ambos.
No pongas el dominio del servidor en el asunto, eso es inútil. Si es una CA, debería tenerlo
CN=My internal CA
o algo así.Agrega la
basicConstraints
extensión. Debe decir que el certificado es una CA.Añade lo correcto
keyUsage
. Debe tener 'keyCertSign' y (solo para completar) 'cRLSign'.No agregues
subjectAltName
. ¡El certificado es para una autoridad/emisor, no para el servidor!No agregues
extendedKeyUsage
. A veces se utiliza para limitar qué certificados puede emitir la CA, pero es mejor empezar sin esta complejidad.Es una buena idea agregar
subjectKeyIdentifier
, en caso de que luego termine teniendo varias CA internas con DN de asunto idénticos. (Normalmente, los DN de CA deben ser únicos, pero tener SKI/AKI lo relaja un poco).
Por lo tanto, debería tener un archivo de configuración "CA" que se parezca más a este (y dejar de agregar SAN y otras cosas a través de la línea de comando; para eso es la configuración):
[ req ]
default_md = sha256
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_dn ]
countryName = US
stateOrProvinceName = Chicago
organizationName = Company Name
organizationalUnitName = iOS development
commonName = Internal development CA
[ req_ext ]
basicConstraints = critical, CA:TRUE
keyUsage = keyCertSign, cRLSign
subjectKeyIdentifier = hash
Mientras que el certificado de entidad final (servidor TLS) debería tener estas extensiones:
...
[ req_ext ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid, issuer
subjectAltName = DNS:server2.myserver.local
Luego instalo ca.p12 y certificado.p12 en mi servidor IIS y en mis dispositivos.
¡No instales la clave privada de la CA en tus dispositivos!Tampoco lo instales en el servidor. Deberías instalarsoloel certificado CA rootCA.crt
(la parte pública) y nada más.
Mi recomendación final: no pierda el tiempo intentando crear CA con archivos raw openssl
. En lugar de usarfácil-RSA(el que viene con OpenVPN), o usarXCA(aplicación gráfica de Linux), o utilice una de lasposiblemente docenasde programas ya escritos y probados.