Confiando en el "sujeto" de un certificado x509

4

Un poco de fondo. Nuestra organización está trabajando en un formato de documento que será ingerido por nuestro software. Estamos utilizando el formato CMS para verificar la integridad (validando la firma). El formato del mensaje del CMS contendrá la cadena del firmante, y por lo tanto, también lo utilizaremos para verificar la confianza con el llavero del sistema predeterminado (los cacerts de Java en nuestro caso).

Para nuestro primer lanzamiento, nos gustaría verificar que nuestra organización es la que ha firmado el documento. Nuestro equipo ha examinado fijación de certificados . En este caso, incluiríamos una copia del certificado x509 que esperamos que sea el cantante y confirmar (después de que hayamos hecho la validación de la firma y la evaluación de confianza) que el firmante es igual a lo esperado. Decidimos no hacerlo por un par de razones. La razón principal es que si se comprometió una clave o caducó un certificado, tendríamos que reenviar nuestro software o hacer que nuestros usuarios realicen un cambio de configuración (cambiar el antiguo certificado por uno nuevo). Preferiríamos que una CRL de una CA pública se encargue de la revocación por nosotros.

Una idea a la que nos inclinamos es verificar que la "organización" de los firmantes (verificados) del tema x509 es nuestra organización. Esto pareció ser un buen compromiso entre la fijación de certificados y la confianza en cualquier persona con un certificado de confianza previa.

En general, ¿es válido confiar en la información que se proporciona en el asunto de un certificado si confiamos en el emisor del certificado? ES DECIR. ¿Puedo estar seguro de que cada Autoridad de Certificación incluida en un almacén de confianza predeterminado no comprometido (de nuevo, los cacerts de Java para nosotros) habrá verificado que la organización que figura en el tema es la organización real? ¿Se extiende eso a otros campos de asunto como estado, local, correo electrónico, etc.? Fuera del anclaje de certificados, ¿hay un paradigma que me esté perdiendo y que esté destinado a lograr este tipo de cosas?

    
pregunta Staros 26.04.2016 - 21:58
fuente

2 respuestas

1

Dirigiendo sus puntos:

  

Nuestro equipo ha examinado la fijación de certificados [del certificado de firma de documentos]. ... Decidimos no hacerlo por un par de razones. La principal razón es que si se comprometió una clave o expiró un certificado, tendríamos que reenviar nuestro software ... Preferiríamos que una CRL de CA públicas se encargara de revocarnos.

Sí, eso tiene sentido. La infraestructura de clave pública (es decir, las jerarquías de CA) existe para resolver problemas exactamente como este, ¡así que aprovéchala!

  

¿Puedo estar seguro de que cada Autoridad de certificación incluida en un almacén de confianza predeterminado no comprometido (de nuevo, los cacerts de Java para nosotros) habrá verificado que la organización que figura en el tema es la organización real?

Sí, esa es la razón principal por la que existen las CA, y es que son de confianza públicamente. Dicho esto, creo que realmente estás tratando de preguntar algo diferente. Esto no garantiza la singularidad; es decir, que no hay otros certificados válidos con un campo Organization que coincida con el suyo. Por ejemplo, considere que su compañía, "Flower Power, inc", está incorporada en los Estados Unidos. Podría incorporar una nueva empresa bajo el nombre "Flower Power, inc" en Alemania, y no hay razón para que una AC me niegue un certificado con ou=Flower Power, inc . Recomendaría usar algo aún más único, como el nombre de dominio de su sitio web o el DN completo de su organización, incluido el código de país, que creo que está tratando con su próxima frase.

Es posible que le interese la nueva tecnología de Google llamada Transparencia del certificado . La idea de CT es que todas las CA de confianza pública deben publicar una copia de cada certificado que emiten en un servidor de registro público. Su empresa podría configurar una tarea en segundo plano, por ejemplo, una vez por hora, para verificar los registros de CT para otros certificados que contengan el mismo identificador Organization que usted. Esto no evitaría que la CA lo emitiera, pero al menos se le notificaría si alguna vez hubo un conflicto.

  

¿Se extiende eso a otros campos de asunto como estado, local, correo electrónico, etc.?

Sí, debería.

Para estar más seguro de que la CA está haciendo bien su trabajo, puede obtener un certificado de Validación ampliada y solicitar que a su cliente se le presente un certificado EV al asegurarse de que contenga uno de los EV Policy OIDs mencionados en esta tabla .

  

Fuera del anclaje de certificados, ¿hay un paradigma que me esté perdiendo y que esté destinado a lograr este tipo de cosas?

Umm, si quieres todo esto enraizado en las CA de confianza pública, entonces lo que estás haciendo, aunque complicado, podría ser la mejor opción.

No estoy familiarizado con el formato del CMS, pero la forma en que lo diseñaría sería alojar su propia CA raíz y una CA intermedia de manera interna y solo usar esa CA para emitir certificados de firma de documentos para su formato . De esa manera usted realmente puede confiar en cualquier certificado emitido desde esa raíz. Extenderlo para permitir que otras organizaciones firmen su formato requeriría que se convierta en una CA pública, pero el esfuerzo podría valer la pena si quiere mantener el control de su formato.

respondido por el Mike Ounsworth 27.04.2016 - 03:15
fuente
2

[Nota: En la primera redacción de la pregunta, parecía haber algunos problemas conceptuales bastante evidentes, la redacción de los mismos solucionó estos problemas. Voy a dejar esta respuesta aquí de todos modos con la esperanza de que sea útil para alguien.]

PKI Fundamentals

Creo que debemos volver a lo básico sobre cómo funcionan la infraestructura de clave pública y los certificados. Voy a robar descaradamente una foto de una cadena de certificados:

Enesteescenario,Usuario1seríaelfirmantedesudocumento,quefirmadocumentosconuncertificadoemitidoporalgunaAutoridaddeCertificación(CA),quepodríaserunaCAraízautofirmadaounaCAintermediaconunaraízporencima.

Validacióndeunacadenadecertificados

Digamosqueyo,comocliente,quierovalidarlafirmaenundocumentoquefirmóelUsuario1.Elprocedimientoseríaeste:

  1. Validelafirmaeneldocumento:hagaunhashdeldocumentoyluegouselaclavepúblicaenelcertificadodelUsuario1paraverificarquesuhashcoincidaconladelcamposignature.
  2. ValidarcertificadodeUser1:Ok,séqueeldocumentofuefirmadoporlaclaveidentificadaenelcertificadodeUser1.¿CómoséqueestaclaveenrealidadpertenecealUsuario1yqueestonoesuncertificadofalso?Bueno,estecertificadoestáfirmadoporunIssuingCA,porloquevalidarélafirmaenelcertificadodeUser1conlaclavedelcertificadoparaelIssuingCA.
  3. ValideelcertificadodeIssuingCA:Ok,séqueelcertificadodeUser1fuefirmadoporlaclaveidentificadaenelcertificadodeIssuingCA.¿CómoséqueestaclaveenrealidadperteneceaIssuingCAyqueestonoesuncertificadofalso?Bueno,estecertificadoestáfirmadoporRootCA,asíquevalidarélafirmaenelcertificadodeIssuingCAconlaclaveenelcertificadoparaRootCA.
  4. ValideelcertificadodeRootCA:bueno,yaqueestecertificadoesautofirmado,nohayformadevalidarlo,asíquecomprobaréquecoincidabitporbit(oquesuhashcoincida)unodeloscertificadosquehefijado(tambiénconocidocomoenmitiendadeconfianza).

Susituación

Usteddice:

  

Nuestroequipohainvestigadolafijacióndecertificadosperohadecididonohacerloporunparderazones....PreferiríamossimplementevalidarcontralaconfianzadelsistemaydejarqueunaCRLdeCApúblicasseencarguedelarevocaciónpornosotros.

Entonces,dime,¿estáshaciendoesavalidaciónsinohasfijadoelcertificadoraíz?¿CómoestávalidandolafirmaenlaCRLparaasegurarsedequenosehayafalsificado?¿QuésucedesilevantomipropioOpenSSLCAenmicajadeLinuxymeemitouncertificadoconelmismosubjectquesucertificado(esdecir,esbitabitidénticoasucertificadodefirmaexceptolaclavepúblicaylafirma))?Porfavor,dimequetusoftwarelorechazaría.

Respondiendoatuspreguntas

  

Engeneral,¿esválidoconfiarenlainformaciónqueseproporcionaenelasuntodeuncertificado?

Uhh,no.No,amenosquehayavalidadolasfirmasenelcertificadohastaelfinalauncertificadoraízquehayafijado.

  

¿Hayalgunaformadeobteneruncertificadox509deunaautoridaddeconfianzapreviaquecontengainformaciónsobreeltemaquenosehayavalidado?

Noestoysegurodeentenderlapregunta.Validadoporquien?UnaAutoridaddeCertificación(CA)públicadebeverificartodalainformaciónenloscamposSubjectySubjectAltNameantesdeemitirelcertificado.Sino,entonceseseCAmerecesalirdelnegocio.Elsoftwaredesuclientetambiéndebevalidarelcontenidodeuncertificadocadavezquelovea,rastreandolasfirmashastaunaraízanclada.

  

¿Debemosverificarqueelcertificadotieneel"Certificado de firma de código" y el uso de la clave para obtener esa garantía?

Umm, eso depende, ¿está firmando el código? Por ejemplo, ¿son los "documentos" en cuestión el software ejecutable (archivos .exe o instaladores)? Si no es así, debería comprobar la extensión "Firma digital". (El objetivo de esta extensión es asegurarse de que un certificado / clave se use para una cosa y solo una cosa. Si una clave se "vuelve a utilizar" en la mitad de su vida útil, esto puede provocar vulnerabilidades).

    
respondido por el Mike Ounsworth 27.04.2016 - 00:27
fuente

Lea otras preguntas en las etiquetas