Firma de un paquete MSIX con firma de Device Guard

Importante

Microsoft Store para Empresas y Microsoft Store para Educación se retirarán en el primer trimestre de 2023. Puede seguir usando las funcionalidades actuales de las aplicaciones gratuitas hasta ese momento. Para obtener más información sobre este cambio, vea Evolución de Microsoft Store para Empresas y Educación.

Importante

El servicio de firma de Device Guard v2 (DGSS v2) ya está disponible.

Mayo de 2021: el mecanismo basado en web existente para el servicio de firma de Device Guard v1 se retirará el 9 de junio de 2021. Realice la transición a la versión basada en PowerShell del servicio (DGSS v2). Hay disponible un paquete NuGet que contiene los componentes de DGSS v2 necesarios y la documentación para la migración. Lea las Condiciones de uso de Microsoft incluidas en el paquete NuGet; tenga en cuenta que el uso de DGSS implica la aceptación de estas condiciones. Si tiene preguntas, póngase en contacto con nosotros en DGSSMigration@microsoft.com.

Nota:

Después de descargar microsoft.acs/dgss.client.nupkg, puede cambiar el nombre a .zip y extraer el contenido de los archivos, así como de la documentación e información adicionales.

Firma de Device Guard es una función de Device Guard disponible en Microsoft Store para Empresas y Educación. Permite a las empresas garantizar que todas las aplicaciones proceden de una fuente de confianza. Puede usar SignTool en Windows SDK y la dlib DGSSv2 en el paquete NuGet para firmar las aplicaciones MSIX con la firma de Device Guard. Esta compatibilidad con características permite incorporar fácilmente el inicio de sesión de Device Guard en el flujo de trabajo de compilación y firma de paquetes MSIX.

La firma de Device Guard requiere permisos en Microsoft Store para Empresas y usa la autenticación de Azure Active Directory (AD). Para firmar un paquete MSIX con firma de Device Guard, siga estos pasos.

  1. Regístrese a fin de obtener Microsoft Store para Empresas o Microsoft Store para Educación, si todavía no lo ha hecho.

    Nota:

    Solo tiene que usar este portal a fin de configurar permisos para la firma de Device Guard.

  2. En Microsoft Store para Empresas (o Microsoft Store para Educación), asígnese un rol con los permisos necesarios para realizar la firma de Device Guard.
  3. Registre la aplicación en Azure Portal con la configuración adecuada a fin de que pueda usar la autenticación de Azure AD con Microsoft Store para Empresas.
  4. Obtenga un token de acceso de Azure AD en formato JSON.
  5. Ejecute SignTool para firmar el paquete MSIX con la firma de Device Guard y pase el token de acceso de Azure AD que ha obtenido en el paso anterior.

En las siguientes secciones se describen estos pasos con más detalle.

Configuración de permisos para la firma de Device Guard

Para usar el inicio de sesión de Device Guard en Microsoft Store para Empresas o Microsoft Store para Educación, necesita el rol de firmante de Device Guard. Este es el rol con privilegios mínimos que tiene la capacidad de firmar. Otros roles, como administrador global y propietario de la cuenta de facturación, también pueden firmar.

Nota:

El rol de firmante de Device Guard se usa cuando se firma como una aplicación. Los roles administrador global y propietario de la cuenta de facturación se usan al iniciar sesión como persona con sesión iniciada.

Para confirmar o reasignar roles, haga lo siguiente:

  1. Inicie sesión en Microsoft Store para Empresas.
  2. Seleccione Administrar y después Permisos.
  3. Vea los Roles.

Para obtener más información, vea Roles y permisos de Microsoft Store para Empresas y Educación.

Registro de la aplicación en Azure Portal

Para registrar la aplicación con la configuración adecuada a fin de poder usar la autenticación de Azure AD con Microsoft Store para Empresas, haga lo siguiente:

  1. Vaya a https://portal.azure.com y autentíquese como un Administrador global de inquilinos.

  2. Vaya al servicio Azure Active Directory.

  3. En el menú de la izquierda, en Administrar, busque y seleccione Registros de aplicaciones.

  4. En la barra de menús, seleccione Nuevo registro.

  5. En el campo Nombre, introduzca DGSSv2.

    Nota:

    El campo Nombre se usa para facilitar la identificación del registro de aplicaciones en Azure Portal. Se puede usar cualquier nombre que quiera. En esta demostración, usaremos DGSSv2 simplemente para facilitar la identificación.

  6. En Tipos de cuenta admitidos, seleccione la configuración adecuada.

    • Solo cuentas de este directorio de organización (un solo inquilino): se recomienda esta opción a menos que tenga una necesidad concreta de una implementación multiinquilino. Todas las cuentas de usuario y de invitados del directorio pueden usar la aplicación o la API.
    • Cuentas en cualquier directorio organizativo (cualquier directorio de Azure AD: multiinquilino): esta opción es mejor para una organización que tenga varios inquilinos de Azure AD, pero que solo necesite un único punto de confianza para la firma de código. Todos los usuarios con una cuenta profesional o educativa de Microsoft pueden usar la aplicación o API. incluidos los centros educativos y las empresas que usen Office 365.
    • Cuentas en cualquier directorio organizativo (cualquier directorio de Azure AD: multiinquilino) y cuentas personales de Microsoft (por ejemplo, Skype, Xbox): no se recomienda esta opción porque está abierta a que la usen cuentas Microsoft de nivel de consumidor. Cualquier usuario con una cuenta profesional o educativa, o bien con una cuenta Microsoft personal puede usar la aplicación o API, Se incluyen los centros educativos y las empresas que usen Office 365, así como las cuentas personales que se usan para iniciar sesión en servicios como Xbox y Skype.
    • Solo cuentas personales de Microsoft: al igual que la anterior, tampoco se recomienda esta opción. Esto no solo se debe a que permite cuentas personales, sino porque esta opción solo admite cuentas personales. Las cuentas de Azure AD están bloqueadas de forma explícita. Cuentas personales que se usan para iniciar sesión en servicios como Xbox y Skype.
  7. En el menú desplegable URI de redireccionamiento, seleccione Cliente público o nativo (móvil y escritorio). Escriba https://dgss.microsoft.com en el cuadro de texto.

  8. Haga clic en Registrar.

  9. Hacia la parte superior derecha de la página, busque la entrada con la etiqueta URI de redirección. Seleccione la línea de debajo con la etiqueta 0 web, 0 spa, 1 cliente público.

  10. Busque la entrada con la etiqueta Permitir flujos de clientes públicos en la sección Configuración avanzada. Establezca este valor en .

  11. Haga clic en Guardar en la parte superior de la página.

  12. Seleccione Permisos de API en el menú lateral izquierdo.

  13. En la barra de menús, seleccione Agregar un permiso. En el menú desplegable, seleccione la pestaña API usadas en mi organización. En el cuadro de búsqueda, escriba Windows Store para Empresas.

Nota:

Si Windows Store para Empresas no aparece en la lista, abra una nueva pestaña del explorador y vaya a https://businessstore.microsoft.com. Después, inicie sesión como el Administrador global del inquilino. Cierre la pestaña del explorador y haga una nueva búsqueda.

  1. Seleccione Windows Store para Empresas y luego Permisos delegados. Compruebe user_impersonation.
  2. Haga clic en Agregar permisos en la parte inferior de la página. En el menú lateral de la izquierda, seleccione Información general para volver a la introducción al registro de aplicaciones DGSSv2.

Obtención de un token de acceso de Azure AD

A continuación, obtenga un token de acceso de Azure AD para la aplicación de Azure AD en formato JSON. Puede hacerlo mediante una variedad de lenguajes de scripting y programación. Para obtener más información sobre este proceso, vea Autorización del acceso a aplicaciones web de Azure Active Directory mediante el flujo de concesión de código OAuth 2.0. Se recomienda recuperar un token de actualización junto con el token de acceso, ya que este último expirará en una hora.

Nota:

Si Windows Store para Empresas no aparece en la lista, abra una nueva pestaña del explorador y vaya a https://businessstore.microsoft.com. Después, inicie sesión como el Administrador global del inquilino. Cierre la pestaña del explorador y haga una nueva búsqueda.

En el ejemplo siguiente de PowerShell se muestra cómo solicitar un token de acceso.

function GetToken()
{

    $c = Get-Credential -Credential $user
    
    $Credentials = New-Object System.Management.Automation.PSCredential -ArgumentList $c.UserName, $c.password
    $user = $Credentials.UserName
    $password = $Credentials.GetNetworkCredential().Password
    
    $tokenCache = "outfile.json"

    #replace <application-id> and <client_secret-id> with the Application ID from your Azure AD application registration
    $Body = @{
      'grant_type' = 'password'
      'client_id'= '<application-id>'
      'client_secret' = '<client_secret>'
      'resource' = 'https://onestore.microsoft.com'
      'username' = $user
      'password' = $password
    }

    $webpage = Invoke-WebRequest 'https://login.microsoftonline.com/common/oauth2/token' -Method 'POST'  -Body $Body -UseBasicParsing
    $webpage.Content | Out-File $tokenCache -Encoding ascii
}

Nota:

Se recomienda guardar el archivo JSON para usarlo más adelante.

Obtención del archivo DLL de firma de Device Guard, versión 2

Para firmar con la versión 2 de firma de Device Guard, obtenga el archivo microsoft.Acs.Dlib.dll; para ello, descargue el paquete NuGet que se usará para firmar el paquete. Esto también es necesario para obtener el certificado raíz.

Firma del paquete

Una vez que tenga el token de acceso de Azure AD, estará a punto para usar SignTool a fin de firmar el paquete con la firma de Device Guard. Para obtener más información sobre el uso de SignTool a fin de firmar paquetes, vea Firma de un paquete de la aplicación mediante SignTool.

En el ejemplo de línea de comandos siguiente se muestra cómo firmar un paquete con la versión 2 de firma de Device Guard.

signtool sign /fd sha256 /dlib Microsoft.Acs.Dlib.dll /dmdf <Azure AAD in .json format> /t <timestamp-service-url> <your .msix package>

Nota:

  • Los certificados generados para la versión 2 de firma de Device Guard son válidos durante un día. Se recomienda usar una de las opciones de marca de tiempo al firmar el paquete. Si no aplicas una marca de tiempo, la firma expirará en un día y se tendrá que volver a firmar la aplicación.
  • Asegúrese de que el nombre del publicador del manifiesto del paquete coincide con el certificado que está usando para firmar el paquete. Con esta característica, este será el certificado de hoja. Por ejemplo, si el certificado de hoja es CompanyName, el nombre del publicador en el manifiesto tendrá que ser CN=CompanyName. De lo contrario, se producirá un error en la operación de firma.
  • Solo se admite el algoritmo SHA256.
  • Al firmar el paquete con la firma de Device Guard, este no se envía a través de Internet.

Prueba

Para probarlo, descargue el certificado raíz haciendo clic aquí o descargando el paquete NuGet y obteniéndolo con el comando:

Get-RootCertificate

Instale el certificado raíz en el almacén Entidades de certificación raíz de confianza en su dispositivo. Instale la aplicación recién firmada para comprobar que ha firmado correctamente la aplicación con la firma de Device Guard.

Importante

Para lograr el aislamiento, implemente la directiva de WDAC de CI a fin de confiar en las aplicaciones firmadas con DGSSv2. Asegúrese de leer la documentación de readme_cmdlets y la migración de DGSSv1 a la documentación de DGSSv2 que se incluye en el paquete NuGet.

Errores comunes

Estos son los errores comunes con los que puede tropezarse.

  • 0x800700d: este error común significa que el formato del archivo JSON de Azure AD no es válido.
  • Es posible que tenga que aceptar los términos y condiciones de Microsoft Store para Empresas antes de descargar el certificado raíz de la firma de Device Guard. Esto se puede hacer adquiriendo una aplicación gratuita en el portal.