¿El certificado intermedio no tiene permiso para emitir certificados?

3

Estoy haciendo una cadena de certificados:

  

.. | raíz
  ..... | intermedio
  ........ | servidor

Cuando mis certificados están instalados, el certificado intermedio tiene un error:

  

Esta autoridad de certificación no tiene permiso para emitir certificados o no se puede utilizar como un certificado de entidad final.

Como resultado, mi certificado de servidor no es válido.

Mi código:

#Root CA
OpenSSL> genrsa -out root.key 4096
OpenSSL> req -new -x509 -days 1826 -key root.key -out root.crt

#Intermidiate CA
OpenSSL> genrsa -out intermediate.key 4096
OpenSSL> req -new -key intermediate.key -out intermediate.csr

#Root signs Intermidiate
OpenSSL> x509 -req -days 1826 -in intermediate.csr -CA root.crt -CAkey root.key -CAcreateserial -out intermediate.crt

#Server CA
OpenSSL> genrsa -out server.key 4096
OpenSSL> req -new -key server.key -out server.csr

#Intermediate signs Server
OpenSSL> x509 -req -days 1826 -in server.csr -CA intermediate.crt -CAkey intermediate.key -CAcreateserial -out server.crt

Mi archivo de configuración:

dir                     = .

[ ca ]
default_ca              = CA_default

[ CA_default ]
serial                  = $dir/serial
database                = $dir/certindex.txt
new_certs_dir           = $dir/certs
certificate             = $dir/cacert.pem
private_key             = $dir/private/cakey.pem
default_days            = 365
default_md              = md5
preserve                = no
email_in_dn             = no
nameopt                 = default_ca
certopt                 = default_ca
policy                  = policy_match
x509_extensions         = v3_ca

[ policy_match ]
countryName             = match
stateOrProvinceName     = match
organizationName        = match
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

[ req ]
default_bits            = 1024              # Size of keys
default_keyfile         = key.pem           # name of generated keys
default_md              = md5               # message digest algorithm
string_mask             = nombstr           # permitted characters
distinguished_name      = req_distinguished_name
req_extensions          = v3_req
keyUsage                = digitalSignature, nonRepudiation
extendedKeyUsage        = serverAuth,clientAuth,emailProtection,codeSigning 

[ req_distinguished_name ]
# Variable name                Prompt string
#-------------------------    ----------------------------------
commonName                     = Common Name (hostname, IP, or your name)
commonName_max                 = 64
0.organizationName             = Organization Name (company)
organizationalUnitName         = Organizational Unit Name (department, division)
emailAddress                   = Email Address
emailAddress_max               = 40
localityName                   = Locality Name (city, district)
stateOrProvinceName            = State or Province Name (full name)
countryName                    = Country Name (2 letter code)
countryName_min                = 2
countryName_max                = 2

# Default values for the above, for consistency and less typing.
# Variable name                Value
#------------------------     ------------------------------
0.organizationName_default     = My Company
localityName_default           = My Town
stateOrProvinceName_default    = State or Providence
countryName_default            = US

[ v3_ca ]
basicConstraints            = CA:TRUE
subjectKeyIdentifier        = hash
authorityKeyIdentifier      = keyid:always,issuer:always

[ v3_req ]
basicConstraints            = CA:TRUE
subjectKeyIdentifier        = hash

[ usr_cert ]
basicConstraints            = CA:TRUE

Honestamente, soy un principiante cuando se trata de hacer certificados. Mi archivo de configuración fue copiado de internet. Necesito algo de ayuda. ¿Qué estoy haciendo mal? ¿Cómo me deshago del error?

    
pregunta 666173742d636174 02.03.2017 - 17:20
fuente

1 respuesta

2

Creo que su problema es que su CA intermedia es en realidad solo un certificado 'regular', con las siguientes extensiones:

keyUsage                = digitalSignature, nonRepudiation
extendedKeyUsage        = serverAuth,clientAuth,emailProtection,codeSigning

Aunque lo hayas establecido

[ v3_req ]
basicConstraints            = CA:TRUE

(que no es algo que realmente deberías estar haciendo), necesitas algo más.

Por man x509 :

  

Un certificado de CA debe tener el bit keyCertSign establecido si la extensión keyUsage está presente.

Me doy cuenta de que probablemente estás tratando de hacer lo 'correcto' al tener un intermediario en la emisión diaria, puedes considerar hacer las cosas un poco más simples para ti mismo mientras investigas openSSL y lo usas para generar PKI. (alias: lea al menos enlace ). Consulte también la sección "Extensiones de certificado" en enlace .

Le sugeriría que consulte cfssl para ayudarlo a obtener el certificado que necesita ahora mismo, si no tiene el Ocio para investigar las cosas a fondo en este momento. También es posible que desee echar un vistazo a la Bóveda de Hashicorp.

    
respondido por el iwaseatenbyagrue 02.03.2017 - 18:21
fuente

Lea otras preguntas en las etiquetas