0 votos

Cómo limitar `set-key-partition-list` a un certificado

TLDR: ¿Cómo puedo hacer que security set-key-partition-list se ejecute contra una única entrada, en lugar de todo en el almacén de claves?


Estaba enfrentando problemas con un desajuste de cifrado con una aplicación dotnet/aspnet y un certificado autofirmado: enter image description here

Finalmente encontré este problema en github, que me llevó a

log stream --process 

Lo que arrojó:

 securityd: [com.apple.securityd:integrity] failure extending partition
 securityd: [com.apple.securityd:security_exception] MacOS error: 32
 securityd: [com.apple.securityd:clientid] code requirement check failed (-67050), client is not Apple-signed
 securityd: [com.apple.securityd:integrity] ACL partition mismatch: client teamid:UBF8T346G9 ACL ("cdhash:71c6a2e36e9b3aa01232049c467ebbad51311b9")

Buscando desde ahí llegué a esta pregunta en SO (!), que sugirió

sudo security set-key-partition-list -D localhost -S unsigned:,teamid:UBF8T346G9 $(security login-keychain)

Y voilà, funcionó - ahora puedo usar este certificado para ejecutar la aplicación localmente.

Pero, ese comando se ejecutó contra ~2489 entradas, en lugar del 1 que esperaba.

Entonces, ¿cómo puedo hacer que security set-key-partition-list se ejecute contra una única entrada, en lugar de todo en el almacén de claves?

Parece que security find-key tiene argumentos completamente diferentes que no parecen coincidir - o bien no obtengo resultados, o ~2489 resultados.

Incluso llegué al punto de explorar el código fuente para tratar de entender esto, pero no avancé mucho.

0voto

SuperCoolMoss Puntos 982

Respondiendo como un compañero de trabajo de Matt Richardson, el OP.

Estábamos cargando un certificado en el llavero usando .NET (versiones específicas de dotnet 6 en macOS 13.5 y anteriores. Si estás usando una versión posterior de dotnet, es posible que desees reevaluar esto)

El comportamiento normal de macOS al cargar un certificado en el llavero es que cuando una aplicación intenta usarlo por primera vez (más específicamente la clave privada asociada al certificado), aparecerá un cuadro de diálogo pidiendo permiso en pantalla, pidiendo al usuario autorizar la operación. Las aplicaciones están representadas por "equipos", que se vinculan a los equipos de cuentas de desarrolladores de Apple.

Para el ejecutable dotnet, el ID de "equipo" es UBF8T346G9 que está vinculado a la cuenta de desarrollador de Apple de Microsoft.

Por alguna razón, cuando usábamos el método X509Store.Add de dotnet para importar un archivo pfx, importaba el certificado y la clave privada, pero lo hacía de una manera que impedía que apareciera este cuadro de diálogo de permisos. Cuando la aplicación intentaba usar el certificado, simplemente fallaba sin posibilidad de solución, excepto forzar set-key-partition-list en todas las claves del llavero.

Descubrimos que llamar al tool de línea de comandos security de Apple usando security import -f pkcs12 -P contraseña importaría correctamente el archivo pfx. Cuando la aplicación intenta usar la clave privada, ahora aparece el cuadro de diálogo de permisos y el usuario puede autorizarlo con éxito.

Esto no responde a la pregunta original de "Cómo limitar set-key-partition-list a un solo certificado" pero al menos aclara por qué necesitábamos hacer esa pregunta en primer lugar, y cómo evitamos la necesidad de una respuesta.

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