Los certificados tienen profundidades, que aumentan a medida que avanza por una cadena de confianza, por lo que la profundidad de certificado 0 emite la profundidad de certificado 1, que emite la profundidad de certificado 2, etc ...
Para verificar satisfactoriamente una cadena de certificados completa, un cliente que se conecte a su sitio web con SSL tendrá que poder encontrar los intermediarios y verificarlos hasta que alcance un certificado de confianza, que en cualquier circunstancia normal es un certificado de CA instalado. con su sistema operativo.
Un cliente arbitrario no encontrará su certificado de intermediario en este caso, ya que estará equipado con todos los certificados habituales instalados con el sistema operativo, pero, por supuesto, no tendrá su intermediario ...
Una computadora de escritorio o servidor, construido como parte de algún tipo de creación corporativa especial para la compañía, puede ser manipulado, por supuesto, agregando certificados, y algunas compañías hacen esto, agregando su propia CA raíz con todas las demás por defecto.
Sin embargo, su servidor web seguro SSL puede proporcionar certificados intermedios (junto con los suyos propios) al cliente cuando se conecta para que pueda completar el proceso de verificación de confianza encadenada, pero ...
El siguiente problema es el certificado intermedio, el que le emitió su CA, puede no ser válido como una CA, y si es así, no se aceptará como un certificado intermedio.
Usando openssl puedes verificar esto ejecutando 'openssl x509':
openssl x509 -text -in CERT_FILENAME
Al probar esto en un certificado de CA, mirando a través de la salida, puede ver:
ef:47:91:0a:72:ba:9e:85:3c:7e:39:6b:62:ed:d0:
13:53:cf:52:52:e2:a8:1a:a8:27:5c:7e:08:a2:ad:
17:1d
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
5C:FC:C1:89:C0:DC:DD:C7:01:0D:EA:37:73:A8:7B:F4:55:85:A5:E4
X509v3 Authority Key Identifier:
keyid:5C:FC:C1:89:C0:DC:DD:C7:01:0D:EA:37:73:A8:7B:F4:55:85:A5:E4
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: sha1WithRSAEncryption
17:e4:1d:18:d6:43:68:75:04:11:c0:6f:72:6b:ac:eb:03:18:
1c:f3:e3:94:f8:77:b5:40:38:3b:20:cd:42:d7:de:db:7c:98:
El bit mágico que estás buscando es:
CA:TRUE
Si CA es FALSE o las extensiones x509 no están allí, no funcionará como CA intermedia.
Finalmente, también si tiene openssl, puede hacer "openssl s_client -connect som.ssl.web.site:443 -CApath / path / to / your / CAcerts -verify 5", y espero que debería, cerca del final de una carga de salida, obtener:
Verify return code: 0 (ok)
Sin embargo, cuando tu intermedio no sea válido como CA, obtendrás:
Verify return code: 26 (unsupported certificate purpose)
Probé esto generando una CA, luego un certificado intermedio y un certificado "final" firmado por el intermediario, y aunque la cadena de confianza es verificable con éxito, se usa en un sitio web, no funciona. Si genero un intermedio V3 con extensiones x509, estableciendo las restricciones básicas de CA en VERDADERO, y luego genero un certificado 'final' firmado por eso, nuevamente la cadena de confianza está bien, pero esta vez el cliente web está contento.