Saltar al contenido

Cómo crear un certificado de confianza o autofirmado que funcione para una aplicación de Windows 10 UWP a través de Visual Studio 2019, 2017 y 2015

Recuerda que en las ciencias un error casi siempre tiene diferentes soluciones, por lo tanto aquí enseñaremos lo mejor y más eficiente.

Solución:

La respuesta proporcionada por @nico tiene declaraciones correctas, pero me hizo darme cuenta de que había más en el problema de lo que describía inicialmente. Así que limpié el título de la pregunta y la pregunta para proporcionar una mejor pregunta y una respuesta posterior.

Buscando en la web encontré muchas de estas respuestas en tantos lugares diferentes, por ejemplo, preguntas, respuestas en los comentarios, youtube, etc. He decidido poner todo aquí en un lugar agradable y ordenado para que todos puedan recurrir y aprender.

Primero, uno debe preguntarse para qué están usando la aplicación. ¿La aplicación se cargará en Microsoft Store o solo se usará internamente?

De cualquier manera querrás depurar y desarrollar la aplicación. La depuración no requiere la instalación de un certificado por lo que en ese sentido estamos seguros.

Si está utilizando la aplicación internamente para su organización o simplemente en su máquina local, necesitará un certificado de confianza.

Este certificado puede existir en un par de escenarios diferentes.

  1. ¿Necesita un certificado autofirmado o
  2. ¿Necesita un certificado emitido por una autoridad certificadora CA, es decir, su empresa u organización?

Voy a repasar ambos escenarios. En cualquier caso, el protocolo makecert está en desuso notas de obsolescencia de makecert

Escenario 1: si necesita un certificado autofirmado, proceda de la siguiente manera

  1. Vaya a PowerShell y utilice el cmdlet pkiclient New-SelfSignedCertificate … lo que hará es proporcionarle la creación de un .cer y el correspondiente privado key + combinación de certificado público = .pfx si compila para el certificado + privado key… Y tienes que tener una key, es decir .pfx, para empaquetar y empaquetar su aplicación con Visual Studio e instalarla en la tienda de aplicaciones de Windows local (no confundir con la tienda de Microsoft).

Aquí están los enlaces a seguir *** Asegúrese de leer 1A primero antes de crear su certificado:

Crear firma de paquete de certificado
Nuevo certificado autofirmado

1A. *** Cuando crea el New-SelfSignedCertificate, debe comprender que el certificado debe crearse de una manera muy específica. Esto es para un certificado autofirmado o emitido por una CA.

Específicamente, el certificado debe poseer 2 propiedades.

a). Tiene que haber una extensión de Restricciones básicas establecida en Tipo de asunto = Entidad final. Lo que esto dice en términos simples es esto … Cuando se le emite este certificado, no puede hacer que el certificado sea una Autoridad de Certificación posterior con la capacidad de emitir más certificados. En otras palabras … Este es un certificado de final de línea.

Puede leer más sobre las restricciones aquí: https://blogs.technet.microsoft.com/pki/2014/03/05/constraints-what-they-are-and-how-theyre-used/

B). El valor de la extensión Enhanced Key Usage (EKU) se establece en Firma de código. Lo que esto hace es evitar que el certificado se utilice para cualquier otro propósito que no sea el previsto … Lo cual garantiza que el software provenga del editor de software &&& Protege el software de alteraciones después de su publicación.
En los detalles del certificado, la información se verá así:

Firma de código (1.3.6..1.5.5.7.3.3) <<<< Este es el OID de uso de clave mejorado para la firma de código del número 1.3.6 ...

Esta información se encontró, de forma muy aleatoria y no en ningún orden particular de documentación fluida, aquí:

Generación de certificados para las aplicaciones de la Tienda Windows

1B. Entonces, en última instancia, para usar el cmdlet New-SelfSignedCertifcate a través de PowerShell, se ejecutaría un comando como tal:

New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=YourCompany CA, 0=Your Corporation, C=US" -TextExtension @("2.5.29.19=textfalse") -KeyUsage DigitalSignature -KeyLength 2048 -NotAfter (Get-Date).AddMonths(33) -FriendlyName friendlyName2

El comando anterior cumple con ambos criterios de un certificado de firma de código (aunque podría haber elegido una extensión de uso de clave oid con el tipo de firma de código correspondiente, es decir, firma de código oid = 1.3.6.1.5.5.7.3 en lugar de usar la propiedad -type. 3)

Si ejecuta el comando anterior en PowerShell, creará 2 cosas que ahora se pueden exportar …

A.) un certificado público B.) un privado key + certificado público contenido en un formato de archivo .pfx.

Ahora que tenemos la capacidad de exportar el .pfx, así es como debería crear una contraseña y exportar el archivo privado. key + archivo de certificado .pfx.

  1. Con el comando, ejecutaría el cmdlet en powershell Export-PfxCertificate:

Aquí está la documentación de Exportación de pfx:

https://docs.microsoft.com/en-us/powershell/module/pkiclient/export-pfxcertificate?view=win10-ps

    $pwd = ConvertTo-SecureString -String  -Force -AsPlainText 
    Export-PfxCertificate -cert "Cert:LocalMachineMy" -FilePath .pfx -Password $pwd
  1. En este punto tienes un key que funciona con Visual Studio y ahora puede empaquetar su aplicación y producir un archivo .appx o un archivo appxbundle que podrá implementarse en la tienda de Windows de las máquinas locales.

Puede encontrar instrucciones detalladas aquí:

https://docs.microsoft.com/en-us/windows/uwp/packaging/packaging-uwp-apps

Escenario 2: si necesita un certificado de confianza de la autoridad de certificación de su organización

Lo que debe tener en cuenta aquí es que la sección anterior es relevante, pero deberá apreciar las diferencias entre un certificado autofirmado y una CA de certificado raíz confiable o una CA posterior.

Bueno, aquí hay una forma de entenderlo. Un certificado raíz en su inicio era un certificado autofirmado. Sin embargo, tiene la capacidad de emitir certificados a otros para una variedad de cosas. es decir, autorización del servidor o firma de código … Piense en restricciones básicas ILIMITADAS. Y también puede emitir otras Autoridades de certificación que pueden emitir certificados a otras personas por diversas razones.

Esto se conoce como la cadena de certificados. Recuerde que desde arriba, el certificado que queremos para nuestros propósitos es el final de esta cadena … Restricciones básicas = LIMITADO a 0 o false, lo que significa que debe estar firmado como End-endtity o Certificate Authroity = false… en otras palabras, no puede emitir más certificados por ningún motivo a partir de este certificado que se emitió.

Dado que esto es para una aplicación que simplemente necesita ser instalada y utilizada. Esto tiene sentido.

Nuevamente, lea este enlace: https://blogs.technet.microsoft.com/pki/2014/03/05/constraints-what-they-are-and-how-theyre-used/

Entonces, para este próximo segmento, voy a explicar los pasos para solicitar un certificado a su Autoridad de Certificación a través de una solicitud de certificado. En el mundo de Linux a través de openssl, esto se conoce como .csr … En el mundo de PowerShell, esto se conoce como .req

Cuando coloca los parámetros correctamente … el resultado final es un archivo que puede ser leído por openssl o sitio web de verificación de cert con una extensión intercambiable de .req o .csr

Powershell tiene la capacidad de crear esto a través de un cmdlet llamado CertReq

  1. Simplemente usaría este comando junto con pasar un archivo .inf que creará su solicitud de certificado .req

certreq -new TestReqConfig.inf MyRequest.req

  1. El archivo .inf contendría parámetros para un key y la información del certificado de forma muy similar a cuando se crea un nuevo certificado autofirmado a partir de la información anterior.

un archivo .inf se vería así:

[NewRequest] 
Subject = "C=US,ST=Florida,L=City,O=Your Company Information,OU=City 
Information,CN=certname.com" 
Requesttype = PKCS10
Exportable = TRUE
HashAlgorithm = md5
KeyAlgorithm = RSA
KeyLength = 2048 
KeyUsage = CERT_DIGITAL_SIGNATURE_KEY_USAGE 
FriendlyName = "FriendlyName CERT"
[Extensions] 
2.5.29.19 = "textfalse"
2.5.29.37 = "text1.3.6.1.5.5.7.3.3"

Requesttype = PKCS10 permite que esto funcione con el decodificador openssl csr … y todo lo demás se explica a través de estos sitios:

El decodificador funciona abriendo el archivo de creación y obteniendo la información que está creando en el medio

-----BEGIN NEW CERTIFICATE REQUEST-----
-----END NEW CERTIFICATE REQUEST-----

Documentación CertReq

decodificador req / csr

Espero que esta información ayude a alguien a aprender sobre los certificados y cómo se utilizan en el empaquetado y creación de aplicaciones de la tienda de Windows.

Según esta documentación: https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/makecert.

El enlace anterior en su caso se utiliza para crear un certificado de Windows para el controlador. Si desea crear el certificado para su paquete UWP, puede consultar los siguientes pasos:

Paso 1: determinar el nombre del editor del paquete

Paso 2: crea un privado key usando MakeCert.exe

Paso 3: Cree un archivo de intercambio de información personal (.pfx) utilizando Pvk2Pfx.exe

Para obtener más detalles, consulte Cómo crear un certificado de firma de paquete de aplicación.

Y también puede usar el siguiente comando para crear un certificado directamente. Solo necesita reemplazar el CN parámetro con su parámetro.

Hacer Pvk

"" /n "CN=Company, O=My Company, C=US" /r /pe /h 0 /eku "1.3.6.1.5.5.7.3.3,1.3.6.1.4.1.311.10.3.13" /e 01/01/2018 /sv C:DevelopmentcertificatesCompany.pvk C:DevelopmentcertificatesCompany.cer

Hacer Cer

"" /pvk C:DevelopmentcertificatesCompany.pvk /pi pvkPassword /spc C:DevelopmentcertificatesCompany.cer /pfx C:DevelopmentcertificatesCompany.pfx /po password! /pi password! 

Si tienes alguna vacilación y disposición de acrecentar nuestro post eres capaz de escribir una crónica y con deseo lo interpretaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *