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

标签 visual-studio uwp visual-studio-2017 certificate self-signed

根据此文档:

https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/makecert

以下命令描述了创建 windows cer 文件(即来自受信任提供商的证书)。

问题在于,在 Visual Studio 2017 中构建应用程序时,它只允许通过 package.windows10.appxmanifest 生成 pfx 文件。更新此命令行引用时,它不会生成 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 中会产生此错误:

The manifest designer could not import the certificate.

The certificate you selected is not valid for signing because it is either expired or has another issue. For more information, see http://go.microsoft.com/fwlink/?LinkID=241478



我转到链接,没有任何内容真正解释发生了什么。一个人评论创建一个临时的有效但它是仅持续一年的非特定测试证书。

有没有更好的方法来使用 makecert 创建脚本?我怎么知道证书最终是否正确构建?附加文档会有所帮助,但我还没有找到其他任何东西。

最佳答案

@nico 提供的答案有正确的陈述,但让我意识到这个问题比我最初描述的要多。所以我清理了问题标题和问题,以提供更好的问题和后续答案。

在网上搜索我在许多不同的地方找到了许多这些答案,例如问题、评论中的答案、youtube 等...我决定将它们全部放在一个漂亮整洁的地方,以便每个人都可以提供资源和学习。

首先,必须问自己他们使用该应用程序的目的是什么?应用程序是要上传到 Microsoft Store 还是仅供内部使用。

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

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

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

  • 您需要自签名证书还是
  • 您是否需要 CA 证书颁发机构(即您的企业或组织)颁发的证书?

  • 我将讨论这两种情况。无论哪种情况,都不推荐使用 makecert 协议(protocol) makecert deprecation notes

    场景 1:如果您需要自签名证书,您将如何进行
  • 转到 powershell 并使用 New-SelfSignedCertificate pkiclient cmdlet...如果您为证书 + 私钥构建,这将为您提供 .cer 和相应的私钥 + 公共(public)证书组合 = .pfx 的创建。 . 并且您必须有一个私钥,即 .pfx,以便将您的应用程序与 Visual Studio 捆绑和打包,并将其安装到本地 Windows 应用程序商店(不要与 Microsoft 商店混淆。)

  • 以下是要遵循的链接 *** 在创建证书之前,请务必先阅读 1A:

    Create Certificate Package Signing
    New-SelfSignedCertificate

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

    具体来说,证书必须拥有2个属性

    一种)。必须有一个基本约束扩展设置为主题类型=结束实体。简单来说,这就是说...当此证书颁发给您时,您不能让该证书成为能够颁发更多证书的进一步后续证书颁发机构。换句话说......这是行证书的结束。

    您可以在此处阅读有关约束的更多信息:
    https://blogs.technet.microsoft.com/pki/2014/03/05/constraints-what-they-are-and-how-theyre-used/

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

    代码签名 (1.3.6..1.5.5.7.3.3) <<<< 这是用于对 1.3.6... 数字进行代码签名的增强型 key 使用 OID

    这些信息是非常随机地发现的,而不是按照流动文档的任何特定顺序,在这里:

    Generating Certificates for the Windows Store Apps

    1B。因此,最终通过 powershell 使用 New-SelfSignedCertifcate cmdlet 将运行如下命令:
    New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=YourCompany CA, 0=Your Corporation, C=US" -TextExtension @("2.5.29.19={text}false") -KeyUsage DigitalSignature -KeyLength 2048 -NotAfter (Get-Date).AddMonths(33) -FriendlyName friendlyName2
    

    上面的命令满足代码签名证书的两个标准(尽管您可以选择具有相应代码签名类型的 key 使用扩展 oid 代替 -type 属性,即代码签名 oid= 1.3.6.1.5.5.7.3。 3)

    如果您在 powershell 中运行上述命令,您将创建 2 个现在可以导出的东西...

    A.) 公共(public)证书
    B.) 包含在 .pfx 文件格式中的私钥 + 公共(public)证书。

    现在我们可以导出 .pfx,这就是您创建密码和导出私钥 + 证书 .pfx 文件的方法。
  • 使用您将在 powershell Export-PfxCertificate 中运行 cmdlet 的命令:

  • 这是导出 pfx 文档:

    https://docs.microsoft.com/en-us/powershell/module/pkiclient/export-pfxcertificate?view=win10-ps
        $pwd = ConvertTo-SecureString -String <Your Password> -Force -AsPlainText 
        Export-PfxCertificate -cert "Cert:\LocalMachine\My\<Certificate Thumbprint>" -FilePath <FilePath>.pfx -Password $pwd
    
  • 此时,您有一个可用于 Visual Studio 的 key ,您现在可以打包您的应用程序并生成一个 .appx 文件或 appxbundle 文件,该文件将能够部署到本地计算机 Windows 商店。

  • 详细说明可以在这里找到:

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

    场景 2:如果您需要来自组织证书颁发机构的可信证书

    在此您必须记住的是,上面的部分是相关的,但您需要了解自签名证书与受信任的根证书 CA 和/或后续 CA 之间的区别。

    好吧,这是理解它的一种方法。最初的根证书是自签名证书。但是,它有能力向其他人颁发各种证书。即服务器授权或代码签名......想想基本约束无限制。它还可以颁发其他证书颁发机构,这些颁发机构可以出于各种原因向他人颁发证书。

    这称为证书链。记住上面的内容,我们想要的证书是这个链的末端...... Basic Constraints = LIMITED to 0 or false,这意味着它必须被签名为 End-endtity 或 Certificate Authroity = false... 在其他情况下换句话说,您不能出于任何原因从颁发的此证书中颁发更多证书。

    因为这是一个只需要安装和使用的应用程序。这是有道理的。

    再次阅读此链接:
    https://blogs.technet.microsoft.com/pki/2014/03/05/constraints-what-they-are-and-how-theyre-used/

    因此,对于下一部分,我将解释通过证书请求从您的证书颁发机构请求证书的步骤。在通过 openssl 的 linux 世界中,这被称为 .csr ... 在 powershell 世界中,这被称为 .req

    当你把参数设置得恰到好处......最终结果是一个可以被openssl或证书验证网站读取的文件,扩展名为.req或.csr

    Powershell 能够通过名为 CertReq 的 cmdlet 创建它
  • 您只需使用此命令并传入一个 .inf 文件即可创建您的 .req 证书请求

  • certreq -new TestReqConfig.inf MyRequest.req
  • .inf 文件将包含 key 和证书信息的参数,就像根据上述信息创建新的自签名证书时一样。

  • .inf 文件如下所示:
    [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"
    

    Requesttype = PKCS10 允许它与 openssl csr 解码器一起使用......其他所有内容都通过这些站点进行了解释:

    解码器通过打开创建文件并获取中间创建的信息来工作
    -----BEGIN NEW CERTIFICATE REQUEST-----
    -----END NEW CERTIFICATE REQUEST-----
    

    CertReq documentation

    req / csr decoder

    我希望这些信息可以帮助人们了解证书以及如何在 Windows 商店应用程序的打包和创建中使用它们。

    关于visual-studio - 如何通过 Visual Studio 2019、2017 和 2015 为 Windows 10 UWP 应用程序创建有效的可信和/或自签名证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48509114/

    相关文章:

    c# - 自定义音频效果如何在AudioFileInputNode完成播放后产生一些声音

    tfs - VSTS (Azure DevOps) 中的错误 - 操作仍在进行中。请稍候再试

    visual-studio - VS2017 中 msbuild 的不同路径

    c# - Visual Studio : can't find "resource file" in list of items to add to project

    visual-studio - Visual Studio 认为一切都是 TypeScript 资源

    c++ - UWP - ListView 绑定(bind)不显示在 C++/CX 中的 XAML 上

    c# - 如何使用 LINQ TO SQL 检查用户名是否已存在于数据表中

    localization - "en"与 "en-US"作为 Windows 10 UWP 的默认语言(全局分布)

    c++ - 关于如何使用简单的 C++ 库(不使用 .net)和使用该库的 C++ 项目创建 .sln 的基本说明?

    c++ - 在资源文件中查找控件