根据此文档:
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 还是仅供内部使用。
无论哪种方式,您都希望调试和开发应用程序。调试不需要安装证书,所以从这个意义上说我们是安全的。
如果您在组织内部或仅在本地计算机上使用该应用程序,那么您将需要一个受信任的证书。
此证书可以存在于几种不同的场景中。
我将讨论这两种情况。无论哪种情况,都不推荐使用 makecert 协议(protocol) makecert deprecation notes
场景 1:如果您需要自签名证书,您将如何进行
以下是要遵循的链接 *** 在创建证书之前,请务必先阅读 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 文件的方法。
这是导出 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
详细说明可以在这里找到:
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 创建它
certreq -new TestReqConfig.inf MyRequest.req
.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/