Estoy importando mi identificación digital (certificado X.509 y clave privada para firmar, verificar, cifrar y descifrar mensajes) al llavero. En la interfaz gráfica de usuario 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 acceder a la clave privada, muestra una ventana de diálogo que dice: "Mail quiere usar tu información confidencial almacenada en "privateKey" en tu llavero".
Ahora bien, tengo varias identificaciones digitales para diferentes direcciones, así que ese mensaje no me da ninguna idea de a qué clave intenta acceder. Investigué un poco y resultó que cuando se importa una clave también se crea una lista ACL dentro del llavero. Cada elemento de esa lista ACL tiene una descripción opcional. Creo que cuando no hay una descripción definida el diálogo mencionado utilizará la descripción de la llave, pero si hay una descripción de ACL se utilizará 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 "galaxy@domain.tld\000"
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):
En primer lugar, quiero cambiar la descripción de "privateKey" a "galaxy@domain.tld (Encryption)" para la entrada 0 de la ACL. He buscado mucho, pero hasta ahora sólo he encontrado referencias a la API de OS X para hacerlo. ¿Existe una herramienta para hacerlo? Si no existe tal herramienta, ¿cómo puedo configurarlo en el momento de la importación? Lo pregunto porque cuando StartSSL fuerza automáticamente a Safari a importar el ID digital, la descripción de la ACL se establece en 'www.startssl.com', así que sé que es posible configurarlo.
Por último, una pregunta extra: ¿hay alguna herramienta o forma de personalizar las ACL? Por ejemplo, quiero eliminar export_* de la ACL de la entrada 1 (también he visto que lo hace StartSSL con sus ID digitales).
ACTUALIZACIÓN: Desde que Apple ha liberado su GUI de acceso a llaveros como código abierto, he comprobado las fuentes para la importación de 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 he codificado nada para OS X y es difícil averiguar qué condición debe cumplirse para obtener la descripción de las ACLs y las propias ACLs en el momento de la importación. La lógica se encuentra en el paquete Security en pkcs12Crypto.cpp:
[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 */
Desgraciadamente en todos mis intentos de importación sigo dando con esa descripción "privateKey" codificada y cuando tengo, digamos, 5 IDs digitales diferentes todos solicitan el acceso con "privateKey" en el diálogo y es confuso.