0 votos

Control granular sobre la configuración de confianza de certificados

TL;DR Estoy buscando una forma de controlar de manera granular si MacOS confía en un certificado para cada propósito individual especificado en las extensiones Basic Constraints (2.5.29.19), Key Usage (2.5.29.15) y Extended Key Usage (2.5.29.37).


Considera el siguiente certificado (de ejemplo):

-----BEGIN CERTIFICATE-----
MIIHQjCCBSqgAwIBAgIUXTOrFr7KK9eWudfZZTJRPI5U9/IwDQYJKoZIhvcNAQEN
BQAwgekxCzAJBgNVBAYTAlhZMRIwEAYDVQQIDAlOZXZlcmxhbmQxGTAXBgNVBAcM
EEltYWdpbmF0aW9udmlsbGUxHzAdBgNVBAoMFkltYWdpbmFyeSBPcmdhbml6YXRp
b24xIjAgBgNVBAsMGVB1YmxpYyBLZXkgSW5mcmFzdHJ1Y3R1cmUxKjAoBgNVBAMM
IWltYWdpbmFyeW9yZ2FuaXphdGlvbi5leGFtcGxlLmNvbTE6MDgGCSqGSIb3DQEJ
ARYraW1hZ2luYXJ5QGltYWdpbmFyeW9yZ2FuaXphdGlvbi5leGFtcGxlLmNvbTAe
Fw0yMzEyMzAyMTQ2MDRaFw0zMzEyMjcyMTQ2MDRaMIHpMQswCQYDVQQGEwJYWTES
MBAGA1UECAwJTmV2ZXJsYW5kMRkwFwYDVQQHDBBJbWFnaW5hdGlvbnZpbGxlMR8w
HQYDVQQKDBZJbWFnaW5hcnkgT3JnYW5pemF0aW9uMSIwIAYDVQQLDBlQdWJsaWMg
S2V5IEluZnJhc3RydWN0dXJlMSowKAYDVQQDDCFpbWFnaW5hcnlvcmdhbml6YXRp
b24uZXhhbXBsZS5jb20xOjA4BgkqhkiG9w0BCQEWK2ltYWdpbmFyeUBpbWFnaW5h
cnlvcmdhbml6YXRpb24uZXhhbXBsZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4IC
DwAwggIKAoICAQDH+nD8CO78AY0dHgqQsvgYPXcla2xBwI7/1sVUnPLMTr8l/QOK
y0pcKOwsSH0YKhGSy6IP7iARkjCIhEaAIRmoiMo2NbU6Vj1mcVq4MfVPKsiBTZk4
5G+xMryaFGy7Uobqp7VQmPA72PdqOShsjJbtAd6Jlkj8ZIclF3KM+QO8nLjx/MAY
LpciFv+wPoZykg9eK0loEgPEwOYLOKHDqfNOwhyx9ZqNE5Fi638GbzXtkn5PRP/N
foXMBcx6G95FkW+BeS7OkBdm4JdXjxscQf+MxhKywzwc5/pZtUFxgEUa4cCYVJ3f
3tpubihZbdOiVWW3Q7AIbKsjsLToI8BRYAouYeFtiho9pJl7lUtz/aPxt7D49OqP
sUQVwlVan3xkmWyLV4W/zdxyGwd+XBMUnL66lTeAYQ4OV0c4K8jPUiSe2/sTRZS
xV2XarShKBYPEnJM0xmGr7L89E96zLLFDUNq6Pn32O08xFopeIUpGbZDdHBwh0WZ
j6vLA2zyDhMVu5fCUFqeQbeDTLrQ5ZC6Oel0hew8x0SZhhv9J+LJnH4SJgjcEROM
sxrikvgZKpsLQlvB+BTWMJuylbrZRKuUNwNYigGmfVLU6x+nCMjqbKyEBmtkeOQn
aKY/xNWOr8azYlvgU7wpxsjZGZdMir2StIm2LVyUg0YwvyDs8H6UVYHhHQIDAQAB
o4HfMIHcMB0GA1UdDgQWBBQdb+QMmYKiMK5KefpVMTNb3H5xnTAfBgNVHSMEGDAW
gBQdb+QMmYKiMK5KefpVMTNb3H5xnTASBgNVHRMBAf8ECDAGAQH/AgECMA4GA1Ud
DwEB/wQEAwIB/jB2BgNVHSUBAf8EbDBqBggrBgEFBQcDAQYIKwYBBQUHAwIGCCsG
AQUFBwMDBggrBgEFBQcDBAYIKwYBBQUHAwgGCCsGAQUFBwMJBggrBgEFBQcDEQYK
KwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDANBgkqhkiG9w0BAQ0F
AAOCAgEAkNJ+cNETwLyPsk5NzEY2awWAByD6FATDlwweukbPJbxrCWt1ZWZaJot+
cxuRbmu2Ef+hBqvdq6nACPIiGS3H5ojG/bikZ0ez637XM58p8O5zVkukTF0e8QBA
txNTgXDMgHcdPso8oI3+1KqOynBj07SYKrVxacnuHOdh3srcd3XVg5b149YY+8GE
jepVaGfxN2qO5BHDgFwuBvBPyO1CrNmqT7vBGpYwpCsu8MslgpzCUPmiP3cP46n9
AZzJ7GMRTvoKEJ8q4544q4oIR9aCS/bsN9qu0go1i+J01t+XxTvGAyCnRmh6DLI2
bMTQYqd+bInEVtEvTN2w5B6hFRgLNQOjS15NHkZahSOQiesJsr8f1jbI7ucxA6dq
ZUaofBNOOASx69hMXwjPwR0Gd0mIrFxJtkBGI8CeysATj686qArgtSmt7RB3aTTm
30JE7y0FjTe47+UI+8NWGxfwk2Qo2eHo9n+sncO+9F3Zd6obiChcaK5YXPSHfEVo
4CVIB2BMy4aspDiMkPza9d5vs3KW0AVPHgaN7pnvDs99kzjbYbG6vJMu+ssEOMa0
S8fzYglgwo6I2lcKNXCmGG1UoXUYmv7LljLW+u6NCiC9MBvyix8WYf1M4yCf45iE
3Xrmsc/Yx+ua9hDaY5sUvkdeVOFBWGDtbHCjOxnwtguLlDWvBDA=
-----END CERTIFICATE-----

Me gustaría confiar en este certificado para los siguientes propósitos:

  • Proteger conexiones a imaginaryorganization.example.com
  • Enviar correos electrónicos firmados y cifrados a imaginary@imaginaryorganization.example.com
  • Firmar código

pero no para los siguientes propósitos:

  • Actuar como autoridad de certificación (a pesar de que el certificado afirma en la extensión de Basic Constraints que es una autoridad de certificación)
  • Timestamping
  • Firmar OCSP
  • Firmar CRL
  • Firmar certificados

¿Cómo puedo lograr esto? Keychain Access solo ofrece un conjunto muy limitado de opciones para la configuración de confianza de certificados.

Preguntas adicionales

  • ¿Existe una forma de confiar en una AC para firmar certificados S/MIME pero no para autenticar conexiones cliente-servidor (o viceversa)?
  • ¿Existe una forma de confiar en una AC para firmar certificados solo pertenecientes a un dominio o subdominio específico, o a una lista de dominios o subdominios?

0voto

Steve Evans Puntos 155

Políticas Granulares

¿Cómo puedo lograr esto?

Keychain Access refleja lo que es posible con macOS. Un certificado tiene una sola política de confianza asociada, y la política define lo que está permitido:

macOS utiliza varias políticas de confianza para determinar si se confía en un certificado. Puede elegir una política diferente para cada certificado, lo que proporciona un mayor control sobre cómo se evalúan los certificados.

Puede leer la documentación del desarrollador de políticas que sustenta los marcos de seguridad de macOS. Las políticas predeterminadas en macOS se definen como:

Políticas de Confianza de macOS

Política

Descripción

Usar los valores predeterminados del sistema o no especificar ningún valor

Usar la configuración predeterminada para el certificado.

Confianza Siempre

Confiar en el autor y permitir siempre el acceso al servidor o la aplicación.

Nunca Confiar

No confiar en el autor y no permitir el acceso al servidor o la aplicación.

Seguridad de Capa de Conexión Segura (SSL)

El nombre en un certificado de un servidor debe coincidir con su nombre de host DNS para establecer correctamente una conexión. La verificación del nombre de host no se realiza para certificados de cliente SSL. Si hay un campo de uso de clave extendido, debe contener un valor apropiado.

Correo Seguro (S/MIME)

El correo electrónico utiliza S/MIME para firmar y cifrar mensajes de forma segura. La dirección de correo electrónico del usuario debe estar incluida en el certificado, y deben estar incluidos los campos de uso de clave.

Protocolo de Autenticación Extensible (EAP)

Cuando se conecta a una red que requiere autenticación 802.1X, el nombre en el certificado del servidor debe coincidir con su nombre de host DNS. Los nombres de host para los certificados de cliente no se verifican. Si hay un campo de uso de clave extendido presente, debe contener un valor apropiado.

Seguridad de Protocolo IP (IPSec)

Cuando se utilizan certificados para asegurar comunicaciones IP (por ejemplo, al establecer una conexión VPN), el nombre en el certificado del servidor debe coincidir con su nombre de host DNS. Los nombres de host para los certificados de cliente no se verifican. Si hay un campo de uso de clave extendido presente, debe contener un valor apropiado.

Firma de Código

El certificado debe contener configuraciones de uso de clave que permitan explícitamente firmar código.

Sellado de Tiempo

Esta política determina si el certificado se puede utilizar para crear un sello de tiempo de confianza, que verifica que una firma digital ocurrió en un momento particular.

Política Básica X.509

Esta política determina la validez del certificado frente a requisitos básicos como haber sido emitido por una autoridad de certificación válida, pero sin preocuparse por el propósito o el uso de la clave permitido.

Para la situación que describe, sería necesario crear una política personalizada.

Una aplicación puede crear políticas personalizadas para evaluar certificados, pero no es evidente una API para instalar políticas personalizadas en todo el sistema. Tampoco se menciona ninguna política personalizada en la herramienta de línea de comandos security.

Esto podría ser posible dentro de un entorno gestionado pero, nuevamente, no hay documentación evidente al respecto.

Todo esto significa que un enfoque más granular no es trivialmente posible con el marco de seguridad ofrecido por macOS.

No es necesario utilizar software de terceros para utilizar los marcos de seguridad integrados y podrían ofrecer el enfoque granular que busca.

Certificados Mínimos

¿Existe alguna manera de confiar en una AC para firmar certificados S/MIME pero no para autenticar conexiones cliente-servidor (o viceversa)?

Los certificados deben emitirse con las capacidades mínimas necesarias para desempeñar su función. Emita certificados según sea necesario para cada subfunción.

El certificado de ejemplo es demasiado amplio:

Extensión=Uso de Clave ( 2.5.29.15 )

  • Crítico=SÍ
  • Uso=
    • Firma Digital
    • No Repudio
    • Cifrado de Clave
    • Cifrado de Datos
    • Acuerdo de Clave
    • Certificar Clave
    • Firmar LCR

Extensión=Restricciones Básicas ( 2.5.29.19 )

  • Crítico=SÍ
  • Autoridad de Certificación=SÍ
  • Restricción de Longitud de Ruta=2

Extensión=Uso de Clave Extendido ( 2.5.29.37 )

  • Crítico=SÍ
  • Propósito #1=Autenticación del Servidor ( 1.3.6.1.5.5.7.3.1 )
  • Propósito #2=Autenticación de Cliente ( 1.3.6.1.5.5.7.3.2 )
  • Propósito #3=Firma de Código ( 1.3.6.1.5.5.7.3.3 )
  • Propósito #4=Protección de Correo Electrónico ( 1.3.6.1.5.5.7.3.4 )
  • Propósito #5=Sellado de Tiempo ( 1.3.6.1.5.5.7.3.8 )
  • Propósito #6=Firma OCSP ( 1.3.6.1.5.5.7.3.9 )
  • Propósito #7=( 1.3.6.1.5.5.7.3.17 )
  • Propósito #8=Firma de Código Comercial ( 1.3.6.1.4.1.311.2.1.22 )
  • Propósito #9=Firma de Lista de Confianza de Certificados ( 1.3.6.1.4.1.311.10.3.1 )
  • Propósito #10=Sistemas de Archivos Encriptados ( 1.3.6.1.4.1.311.10.3.4 )

Autorización de Autoridad de Certificación

¿Existe alguna manera de confiar en una AC para firmar certificados solo pertenecientes a un cierto dominio o subdominio, o a una lista de dominios o subdominios?

Una Autoridad de Certificación (AC) puede firmar cualquier certificado. El software evaluativo es responsable de realizar controles adicionales.

Publique una entrada de Autorización de Autoridad de Certificación de DNS para los dominios:

La Autorización de Autoridad de Certificación de DNS (CAA) es un mecanismo de política de seguridad en Internet que permite a los titulares de nombres de dominio indicar a las autoridades de certificación si están autorizadas para emitir certificados digitales para un nombre de dominio en particular. Esto se hace mediante un registro de recursos del Sistema de Nombres de Dominio (DNS) que se llama "CAA".

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X