Ir al contenido

¡Se acercan los certificados de 47 días! ¿Estás preparado?

Actúa ahora →

Cómo firmar manifiestos de ClickOnce con Visual Studio

Haz clic una vez y fírmalo

Al descargar un programa, script o macro, aparecerá una ventana emergente durante la instalación o ejecución que pregunta: "¿Seguro que desea ejecutar esto?" o "¿Desea permitir que el siguiente programa afecte a este equipo?". En esta ventana emergente se utiliza la firma de código. Las herramientas de firma de código son cruciales porque distinguen entre software legítimo y código malicioso o fraudulento.

Para firmar manifiestos de ClickOnce en Visual Studio, en resumen: importe su certificado de firma de código al almacén de certificados personales (mediante una herramienta KSP si la clave está respaldada por HSM). A continuación, en el paso "Firmar manifiestos" del asistente de publicación, marque la casilla "Firmar los manifiestos de ClickOnce" y seleccione el certificado importado. Visual Studio firma automáticamente los archivos .application y .manifest al publicar.

Puntos Clave

  • Visual Studio necesita que el certificado sea visible en el almacén de certificados de Windows (Personal/Mi), no solo que esté presente en un HSM. Una herramienta de importación basada en KSP conecta ambos sistemas, de modo que la clave privada permanece en el hardware mientras Visual Studio puede seguir haciendo referencia a ella mediante su huella digital.
  • La firma se realiza automáticamente como parte del proceso de publicación; una vez configurado el asistente, no existe un comando de firma manual independiente, lo que también significa que automatizar esto para CI/CD requiere controlar la misma configuración a través de los parámetros de MSBuild en lugar de la interfaz gráfica de usuario.

Matriz de entorno

ComponenteRequisito
IDEVisual Studio (2019/2022) con el flujo de trabajo de publicación ClickOnce disponible para el tipo de proyecto.
Tipología de proyectoAplicación de escritorio .NET Framework o .NET compatible con la implementación ClickOnce.
Visibilidad del certificadoDebe importarse al almacén de certificados de Windows (Personal), no solo almacenarse en un HSM.
Herramienta de puenteo HSMUna utilidad KSP (proveedor de almacenamiento de claves), por ejemplo, ECGetCert.exe, para exponer la clave respaldada por HSM al almacén de certificados de Windows.
Referencia del certificadoHuella digital SHA-1, utilizada con certutil para reparar/registrar la entrada del almacén contra el KSP.

La firma digital de código es un procedimiento que verifica la legitimidad del autor y la originalidad y autenticidad de la información digital, en particular del código de software. Asimismo, garantiza que la información no sea código malicioso. Además, asegura que esta información no haya sido alterada, falsificada ni eliminada después de haber sido firmada digitalmente.

 Sus proyectos desarrollados en Visual Studio con Visual Basic y Visual C# pueden publicarse y actualizarse con ClickOnce. ClickOnce es una tecnología de Microsoft que se utiliza para implementar y actualizar aplicaciones de escritorio de Windows a través de internet. Permite a los desarrolladores publicar sus aplicaciones en un servidor web o un recurso compartido de archivos de red y ponerlas a disposición de los usuarios con un solo clic, sin necesidad de una instalación o configuración compleja.

Al publicar tu proyecto con ClickOnce, puedes firmar los manifiestos de ClickOnce mediante un certificado. Esto ayuda a demostrar la legitimidad de tu aplicación, y este proceso se denomina firma de código . La firma de código con ClickOnce proporciona varias funciones de seguridad para garantizar que la aplicación y sus actualizaciones se descarguen de una fuente confiable y que los usuarios estén protegidos contra posibles amenazas de seguridad. Añade una capa adicional de seguridad a tu aplicación y puede contribuir a aumentar la confianza de los usuarios.

Cuando publica su proyecto usando ClickOnce sin codificar, cuando el usuario ejecuta dicha aplicación, a menudo aparece un cuadro de diálogo con una advertencia de seguridad.

ClickOnce sin codificar

Pero no aparecen tales advertencias cuando firmas manifiestos de ClickOnce con un certificado de firma de código.

Encryption Consulting ofrece una solución de firma de código, « CodeSign Secure », que le permite almacenar las claves de forma segura y con total visibilidad y control de las actividades de firma de código. Las claves privadas del certificado de firma de código se pueden almacenar en un módulo de seguridad de hardware (HSM) para eliminar los riesgos asociados con claves robadas, dañadas o utilizadas indebidamente.

Esta solución proporciona una herramienta y un certificado para firmar manifiestos de ClickOnce. Deberá instalar y configurar la herramienta y seguir los pasos a continuación para continuar.

Solución de firma de código empresarial

Obtenga una solución para todas sus necesidades criptográficas de firma de código de software con nuestra solución de firma de código.

  1. Instalar y configurar la herramienta (SigningKSP)
  2. Desde el símbolo del sistema, acceda al directorio donde se encuentra ECGetCert.exe.

    diseño de código ev
  3. Ejecute el comando: ECGetCert.exe evcodesigning Aquí, evcodesigning es el nombre del certificado que estamos usando para el propósito de diseño de código.

    Este comando guardará el archivo evcodesigning.pem (certificatename.pem) en el mismo directorio

    Configurar la herramienta (SigningKSP)
  4. Abra certmgr.msc y vaya a Personal -> Certificados. Si no hay una carpeta de certificados, haga clic derecho en Personal -> Todas las tareas -> Importar.

    certificados de certificado
  5. Se abrirá un asistente para importar certificados. Haga clic en "Siguiente". La ubicación predeterminada de la tienda es la del usuario actual.

    Asistente para importación de certificados
  6. En la página siguiente, busque el certificado. Debe estar guardado en el mismo directorio que EGGetCert.exe. Desde allí, seleccione evcodesigning.pem (nombredelcertificado.pem). Si no ve el archivo, seleccione "Todos los archivos" en la parte inferior en lugar de "Certificado X.509". Una vez seleccionado el certificado, haga clic en "Siguiente".

    EGGetCert
    Certificado X.509
  7. En la otra página, asegúrese de que la opción "Colocar todos los certificados en el siguiente almacén" esté seleccionada. En esta opción, el almacén de certificados esté configurado como Personal. Haga clic en "Siguiente" y luego en "Finalizar". Verá un cuadro de diálogo indicando que la importación se realizó correctamente.

    almacén de certificados
    importación de certificados
  8. Una vez importada la copia del certificado, necesitará el valor de la huella digital. Haga clic en Personal -> Certificados -> y luego en el certificado importado. Vaya a "Detalles" y desplácese hasta la huella digital. Puede copiar el valor.

    detalles del certificado

    Regrese al símbolo del sistema. Ejecute el siguiente comando. Asegúrese de incluir la huella digital de su certificado en el comando.

    certutil -f -repairstore -csp “Proveedor de almacenamiento de claves de consultoría de cifrado” -user “Mi” 79656a9ce126fd0d1bb33f4dc73dba308f58b3ac

    Proveedor de almacenamiento de claves
    Publicar una vez
  9. Una vez que se ejecuta el comando, navegue hasta el proyecto en Visual Studio que desea publicar con ClickOnce.

  10. En el Explorador de soluciones, haga clic derecho en su proyecto y navegue hasta Publicar. Haga clic en él.

    Publicar con ClickOnce
  11. Se abrirá un nuevo cuadro de diálogo. Seleccione "ClickOnce" y haga clic en "Siguiente".

    ClickOnce Publica hoy
  12. En la página siguiente, elija una ubicación de publicación o deje el valor predeterminado bin\publish y haga clic en Siguiente.

    dejar el contenedor predeterminado
  13. Puede elegir la ubicación de instalación que prefiera o dejar la predeterminada. Haga clic en Siguiente.

    Ubicación de instalación
  14. Seleccione su configuración en la siguiente pestaña como desee y haga clic en Siguiente

    Configuración de VS
  15. En Firmar manifiestos, marque la casilla “Firmar los manifiestos ClickOnce” y haga clic en seleccionar un certificado de la tienda.

    Firmar los manifiestos de ClickOnce

    Se abrirá un cuadro de diálogo con el certificado importado inicialmente. Haga clic en Aceptar para continuar.

    abrir un certificado

    Ahora puedes ver los detalles del certificado en los manifiestos de firma

    detalles del certificado
  16. Haga clic en siguiente para elegir su configuración y haga clic en Finalizar.

  17. Verá el progreso de creación del perfil de publicación y una marca de verificación verde cuando la creación sea exitosa.

    Publicar creación de perfil
  18. Puedes ver el perfil de publicación creado.

    ClickOnce se manifiesta con Visual Studio

Hemos firmado correctamente los manifiestos de ClickOnce con Visual Studio. Haga clic en Publicar para publicar su proyecto.

Verificación de la firma

Después de publicar, confirme que la firma haya surtido efecto antes de distribuir la aplicación: haga clic con el botón derecho en el archivo .application publicado en el Explorador de Windows, abra Propiedades y compruebe la pestaña Firmas digitales; debería mostrar su certificado con un estado válido. Desde la línea de comandos, mage.exe -Verify yourapp.application (Mage.exe viene incluido con el SDK de Windows) comprueba la firma del manifiesto e informa si la validación se realizó correctamente o si se produjo un fallo específico.

Errores comunes

ErrorCausa probableSolución
No aparece ningún certificado en el selector de certificados de Visual Studio.El certificado no se importó al almacén personal, o se importó a la máquina local en lugar de al usuario actual.Vuelva a importar a través de certmgr.msc, confirmando "Personal" como almacén y "Usuario actual" como ubicación.
El comando certutil -repairstore falla o informa que no se encuentra la huella digital.Huella digital copiada incorrectamente o espacios en blanco/caracteres ocultos adicionales pegados desde la vista de detalles del certificado.Si el error persiste, copie la huella digital directamente desde la pestaña Detalles del certificado y vuelva a escribirla en lugar de pegarla.
La publicación se realiza correctamente, pero el manifiesto aparece como no firmado.La casilla de verificación "Firmar los manifiestos de ClickOnce" estaba desmarcada, o la selección del certificado se borró en una página posterior del asistente.Vuelva a abrir las propiedades de publicación y confirme que la casilla de verificación "Firmar manifiestos" y el certificado siguen configurados antes de volver a publicar.

Uso y limpieza de CI/CD

La configuración del asistente de publicación se almacena en el archivo .pubxml del proyecto, por lo que una canalización de CI/CD puede controlar el mismo comportamiento de firma de forma no interactiva invocando msbuild con el apropiado /p:PublishProfile y propiedades de MSBuild para la firma de manifiestos (SignManifests, ManifestCertificateThumbprint) en lugar de navegar por la interfaz gráfica de usuario. El agente de compilación aún necesita el certificado visible en su propio almacén de certificados mediante el mismo paso de puenteo KSP descrito anteriormente; no hay forma de dirigir MSBuild directamente a un HSM sin ese registro intermedio.

Para la limpieza: una vez que un agente de compilación ya no necesite la capacidad de firma, elimine el certificado de su almacén personal y anule el registro del enlace KSP, en lugar de dejar una identidad con capacidad de firma en una máquina que ya no la necesita.

Preguntas frecuentes

¿Puedo automatizar la firma de manifiestos de ClickOnce sin abrir Visual Studio?

Sí. Corre. msbuild contra el perfil de publicación del proyecto con las propiedades de firma del manifiesto establecidas (SignManifests, ManifestCertificateThumbprint), el certificado aún debe ser visible primero en el almacén de certificados del agente de compilación.

¿Cómo puedo confirmar que una aplicación ClickOnce publicada está realmente firmada?

Compruebe la pestaña Firmas digitales del archivo .application en el Explorador de Windows o ejecute mage.exe -Verify contra ello desde la línea de comandos.

¿La clave privada sale alguna vez del HSM durante este proceso?

No, siempre que el KSP esté configurado correctamente. Visual Studio accede al certificado mediante su huella digital a través del Proveedor de almacenamiento de claves; la operación con la clave privada se realiza dentro del HSM, no en la máquina firmante.

Conclusión

Gracias a su firma digital y otras funciones de seguridad, la firma de manifiestos ClickOnce permite a los desarrolladores establecer el nivel de confianza que los usuarios deben tener en una aplicación. Esto puede reducir la probabilidad de que se ejecute software dañino en el equipo de un usuario. Con el rápido aumento de virus y malware en las aplicaciones en línea, es necesario tomar estas medidas para prevenir cualquier daño. Más vale prevenir que curar.

En resumen, incorporar la firma de código a la seguridad del software es fundamental para protegerlo contra ataques de malware y manipulaciones. Code Sign Secure de Encryption Consulting ofrece diversas ventajas, como una integración perfecta con los flujos de trabajo de desarrollo, autenticación y cifrado robustos, y opciones de precios personalizables. Para obtener más información sobre cómo puede usar Code Sign Secure, visite www.encryptionconsulting.com/code-signing-solution/ o contáctenos en [email protected]