¿Hay alguna forma de modificar las descripciones de ACL del elemento del llavero?

2

Estoy importando mi ID digital (certificado X.509 y clave privada para firmar, verificar, cifrar y descifrar mensajes) en el llavero. En la GUI veo mi certificado y la clave correspondiente y puedo modificar sus descripciones y puedo escribir una nota describiendo su uso, etc.

Sin embargo, cuando Mail.app intenta obtener acceso a la clave privada, aparece una ventana de diálogo que dice: "Mail quiere usar tu información confidencial almacenada en" privateKey "en tu llavero".

Ahora, tengo varias ID digitales para diferentes direcciones, por lo que ese mensaje no me da ninguna idea de a qué clave intenta acceder. Investigué un poco y resultó que cuando importas una clave, también se crea una lista de ACL dentro del llavero. Cada elemento en esa lista de ACL tiene una descripción opcional. Creo que cuando no hay una descripción definida, el diálogo mencionado usará la descripción de la clave, pero si hay una descripción de ACL, se usará en su lugar.

Cuando vuelco mi llavero con "security dump-keychain -a" obtengo lo siguiente:

keychain: "/Users/galaxy/Library/Keychains/login.keychain"
class: 0x00000010
attributes:
    0x00000000 <uint32>=0x00000010
    0x00000001 <blob>=0x646[...]00  "[email protected]
[galaxy@home:~/xcode/Security-55471.14.18/libsecurity_pkcs12/lib]$ grep -B5 -A5 '"privateKey"' pkcs12Crypto.cpp
        try {
            CssmClient::KeyAclBearer bearer(
                cspHand, *privKey, Allocator::standard());
            SecPointer<KeychainCore::Access> initialAccess(access ?
                KeychainCore::Access::required(access) :        /* caller-supplied */
                new KeychainCore::Access("privateKey"));        /* default */
            initialAccess->setAccess(bearer, maker);
        }
        catch (const CssmError &e) {
            /* not implemented means we're talking to the CSP which does
             * not implement ACLs */
0" 0x00000002 <blob>=<NULL> [...] 0x0000001A <uint32>=0x00000001 access: 3 entries entry 0: authorizations (1): encrypt don't-require-password description: privateKey applications: <null> entry 1: authorizations (6): decrypt derive export_clear export_wrapped mac sign don't-require-password description: privateKey applications (0): entry 2: authorizations (1): change_acl don't-require-password description: privateKey applications (0):

Primero que nada, quiero cambiar la descripción de "privateKey" a "[email protected] (Encryption)" para la entrada ACL 0. Busqué mucho, pero hasta el momento solo encontré referencias a OS X API para hazlo ¿Hay una herramienta para hacer eso? Si no existe tal herramienta, ¿cómo puedo configurarlo en el momento de la importación? Estoy preguntando porque cuando StartSSL obliga automáticamente a Safari a importar la identificación digital, la descripción de la ACL está configurada en 'www.startssl.com', por lo que sé que es posible configurarlo.

Finalmente, ¿una pregunta adicional es si existe una herramienta o una forma de personalizar las ACL? Por ejemplo, quiero eliminar export_ * de la ACL de la entrada 1 (también he visto que StartSSL lo hizo con sus ID digitales).

ACTUALIZACIÓN: desde que Apple lanzó su GUI de acceso de llavero como código abierto, verifiqué las fuentes para la importación PKCS # 12 y allí tienen una opción para configurar la descripción y las ACL en el momento de la importación. Sin embargo, nunca codifiqué nada para OS X y es difícil averiguar qué condición se debe cumplir para obtener la descripción de las ACL y las ACL en el momento de la importación. La lógica se encuentra en el paquete de seguridad en pkcs12Crypto.cpp:

keychain: "/Users/galaxy/Library/Keychains/login.keychain"
class: 0x00000010
attributes:
    0x00000000 <uint32>=0x00000010
    0x00000001 <blob>=0x646[...]00  "[email protected]
[galaxy@home:~/xcode/Security-55471.14.18/libsecurity_pkcs12/lib]$ grep -B5 -A5 '"privateKey"' pkcs12Crypto.cpp
        try {
            CssmClient::KeyAclBearer bearer(
                cspHand, *privKey, Allocator::standard());
            SecPointer<KeychainCore::Access> initialAccess(access ?
                KeychainCore::Access::required(access) :        /* caller-supplied */
                new KeychainCore::Access("privateKey"));        /* default */
            initialAccess->setAccess(bearer, maker);
        }
        catch (const CssmError &e) {
            /* not implemented means we're talking to the CSP which does
             * not implement ACLs */
0" 0x00000002 <blob>=<NULL> [...] 0x0000001A <uint32>=0x00000001 access: 3 entries entry 0: authorizations (1): encrypt don't-require-password description: privateKey applications: <null> entry 1: authorizations (6): decrypt derive export_clear export_wrapped mac sign don't-require-password description: privateKey applications (0): entry 2: authorizations (1): change_acl don't-require-password description: privateKey applications (0):

Desafortunadamente, en todos mis intentos de importación, sigo teniendo esa descripción codificada de "privateKey" y cuando tengo, por ejemplo, 5 ID digitales diferentes, todas piden acceso con "privateKey" en el cuadro de diálogo y es confuso.

    
pregunta galaxy 03.10.2014 - 13:59

2 respuestas

2

Después de una investigación bastante tediosa, parece que no hay una manera fácil de editar la descripción de la clave privada, así que básicamente, a menos que Apple mejore su aplicación de Acceso a Llaves, no hay manera de distinguir entre múltiples ID digitales importadas en el mismo llavero .

También parece que Google Chrome (y Chromium) han implementado algunas rutinas de administración de claves y están administrando las descripciones de las claves privadas importadas. Sin embargo, aún no he descubierto exactamente cómo aprovechar esta funcionalidad.

De todos modos, la respuesta corta a mi pregunta: no hay forma de modificar la ACL del artículo y / o sus descripciones en el llavero OS X en este momento y parece que a nadie realmente le importa.

    
respondido por el galaxy 13.10.2014 - 15:09
0

Por casualidad me topé con una solución (de tipo) por el problema de "privateKey" que se muestra en los cuadros de diálogo del correo y confunde un ...

  

forma de distinguir entre varias ID digitales importadas en el mismo llavero.

Esta no es una solución tan elegante y no entiendo por qué funciona, pero después de muchas pruebas, en varios clientes de correo, bajo OS X 10.10.3 y 10.10.4, Descubrimos que funciona , es fácil y siempre funciona. En pocas palabras, básicamente solo arrastra las ID digitales a un nuevo llavero y luego da la vuelta y las arrastra hacia atrás.

Los detalles útiles y las lecciones aprendidas son los siguientes:

  • Aplicable a las ID digitales en el llavero de inicio de sesión. Otros llaveros no probados.
  • Usar un llavero del sistema existente como intermediario no funcionó.
  • Los nuevos llaveros requieren una contraseña de al menos seis caracteres, pero de alguna fuerza.
  • Tenga cuidado con las contraseñas de los nuevos llaveros no están guardados en ningún otro llavero!
  • Predeterminado Bloquear Configuración para los llaveros nuevos son un molesto 5 minutos y Suspender .
  • Al arrastrar (o pegar) de la ID, el control de acceso de clave privada fallos para Permitir que todas las aplicaciones accedan a este elemento . Entra manualmente y vuelve a cambiarlo a Confirmar antes de permitir el acceso .
  • Dejar los ID en el nuevo llavero y usarlos puede que no sea práctico ya que los nuevos llaveros no se desbloquean al iniciar sesión.
  • Al eliminar el nuevo llavero, es mejor seleccionar la opción no predeterminada Eliminar referencias & Archivos .
  • Las ediciones posteriores del nombre de la clave privada requieren otra "solución" para efectuar los cambios.
respondido por el Spook 13.07.2015 - 06:17

Lea otras preguntas en las etiquetas