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.