Visual studio 如何通过Visual Studio 2019、2017和2015为Windows 10 UWP应用程序创建可工作的受信任和/或自签名证书

Visual studio 如何通过Visual Studio 2019、2017和2015为Windows 10 UWP应用程序创建可工作的受信任和/或自签名证书,visual-studio,uwp,visual-studio-2017,certificate,self-signed,Visual Studio,Uwp,Visual Studio 2017,Certificate,Self Signed,根据本文件: 以下命令描述如何创建windows cer文件(即来自受信任的提供程序的证书) 问题在于,在visual studio 2017中构建应用程序时,它只允许通过package.windows10.appxmanifest生成pfx文件。更新this命令行引用时,它不会生成pvk文件,因此需要添加 MakeCert -r -pe -ss PrivateCertStore -n "CN=Contoso.com(Test)" testcert.cer 其他命令行选项,如/sv Subj

根据本文件:

以下命令描述如何创建windows cer文件(即来自受信任的提供程序的证书)

问题在于,在visual studio 2017中构建应用程序时,它只允许通过package.windows10.appxmanifest生成pfx文件。更新this命令行引用时,它不会生成pvk文件,因此需要添加

MakeCert -r -pe -ss PrivateCertStore -n "CN=Contoso.com(Test)" testcert.cer
其他命令行选项,如/sv SubjectKeyFile,将生成生成的pvk文件

但是,即使使用此命令行引用:

MakeCert -r -pe -ss PrivateCertStore -n "CN=Contoso.com(Test)" -sv testcert.pvk testcert.cer
将生成的证书文件植入visual studio会产生以下错误:

清单设计器无法导入证书

您选择的证书无效,无法签名,因为它已过期或存在其他问题。有关详细信息,请参阅

我去了链接,什么也解释不了到底发生了什么。一个人评论创建一个临时证书,但它是一个非特定的测试证书,只持续一年

是否有更好的方法使用makecert创建脚本?我如何知道证书最终是否正确构建?其他文档可能会有所帮助,但我没有发现任何其他内容

根据此文档:

您案例中的上述链接用于为驱动程序生成windows证书。如果要为UWP包生成证书,可以参考以下步骤:

步骤1:确定包的发布者名称

步骤2:使用MakeCert.exe创建私钥

步骤3:使用Pvk2Pfx.exe创建个人信息交换(.pfx)文件

有关更多详细信息,请参阅

您还可以使用下面的命令直接创建证书。您只需要将
CN
参数替换为您的参数

制作Pvk

"<C:\Program Files (x86)\Windows Kits\10\bin\x64\MakeCert.exe>" /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:\Development\certificates\Company.pvk C:\Development\certificates\Company.cer
”/n“CN=Company,O=mycompany,C=US”/r/pe/h0/eku“1.3.6.1.5.5.7.3.3,1.3.6.1.4.1.311.10.3.13”/e 01/2018/sv C:\Development\certificates\Company.pvk C:\Development\certificates\Company.cer
制作Cer

"<C:\Program Files (x86)\Windows Kits\10\bin\x64\Pvk2Pfx.exe>" /pvk C:\Development\certificates\Company.pvk /pi pvkPassword /spc C:\Development\certificates\Company.cer /pfx C:\Development\certificates\Company.pfx /po password! /pi password! 
”/pvk C:\Development\certificates\Company.pvk/pi pvkPassword/spc:\Development\certificates\Company.cer/pfx C:\Development\certificates\Company.pfx/po密码/pi密码!

由@nico提供的答案陈述正确,但让我意识到问题的严重性超出了我最初描述的范围。因此,我整理了问题标题和问题,以提供更好的问题和后续答案

在网上搜索,我在很多不同的地方找到了这些答案,例如问题、评论中的答案、youtube等等。。。我决定把它放在一个整洁的地方,这样每个人都可以利用资源和学习

首先,人们必须问问自己,他们使用该应用程序的目的是什么?是将应用程序上载到Microsoft应用商店,还是仅在内部使用

无论哪种方式,您都需要调试和开发应用程序。调试不需要安装证书,因此从这个意义上讲,我们是安全的

如果您在组织内部使用该应用程序,或者只是在本地计算机上使用该应用程序,那么您将需要一个受信任的证书

此证书可以存在于两种不同的场景中

  • 您是否需要自签名证书或证书
  • 您是否需要CA证书颁发机构(即您的企业或组织)颁发的证书 我将讨论这两种情况。在这两种情况下,makecert协议都不推荐使用

    场景1:如果您需要一个自签名证书,您将如何继续

  • 转到powershell并使用新的SelfSignedCertificate pkiclient cmdlet。。。这将为您提供一个.cer和相应的私钥+公共证书组合=.pfx的创建,如果您为证书+私钥构建。。。您必须拥有私钥,即pfx,以便使用Visual Studio捆绑和打包您的应用程序,并将其安装到本地windows应用程序商店(不要与Microsoft商店混淆)
  • 以下是以下链接***请确保在创建证书之前先阅读1A:


    1A.**创建新的SelfSignedCertificate时,必须了解必须以非常特定的方式创建证书。这是用于自签名或CA颁发的证书

    具体而言,证书必须具有2个属性

    a) 。必须将基本约束扩展设置为Subject Type=End Entity。简单地说,这意味着。。。向您颁发此证书后,您不能让该证书成为具有颁发更多证书能力的后续证书颁发机构。换句话说。。。这是一个结束线证书

    您可以在此处阅读有关约束的更多信息:

    b) 。增强密钥使用(EKU)扩展的值设置为代码签名。这样做的目的是防止证书被用于其预期用途以外的任何用途。。。确保软件来自软件发行商&&保护软件在发布后不受更改。
    在证书的详细信息中,信息如下所示:

    [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 = "{text}false"
    2.5.29.37 = "{text}1.3.6.1.5.5.7.3.3"
    

    在-TextExtension参数中缺少代码签名(1.3.6..1.5.5.7.3.3)。这让我经历了一段时间。我为上述类型添加了一个编辑,并添加了一些附加信息,用于在本地运行自签名CA证书,而不会收到警告。@whodee我正在尝试编辑它,但我不知道如何。。。我明白你的意思了。@RoyJacobs我看过你的编辑,Visual Studio有一个简单易行的临时工证书,但那是
        $pwd = ConvertTo-SecureString -String <Your Password> -Force -AsPlainText 
        Export-PfxCertificate -cert "Cert:\LocalMachine\My\<Certificate Thumbprint>" -FilePath <FilePath>.pfx -Password $pwd
    
    [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 = "{text}false"
    2.5.29.37 = "{text}1.3.6.1.5.5.7.3.3"
    
    -----BEGIN NEW CERTIFICATE REQUEST-----
    -----END NEW CERTIFICATE REQUEST-----