我可以使用 EV 证书手动签署 .hlkx 文件以在Microsoft网站上提交吗?



我已经在硬件实验室工具包中使用 USB 设备完成了所有测试,现在可以准备 .hlkx 驱动程序包以在Microsoft网站上提交。

问题是 Windows 10 驱动程序需要 EV 证书。EV 证书随安全网 USB 令牌一起提供,并且此 USB 令牌远离安装了硬件实验室工具包的计算机,因此我无法在硬件实验室工具包中自动对 .hlkx 包进行签名。

问题是如何让我的 Windows 10 USB 驱动程序签名?我有未签名的驱动程序(系统,驾驶室,inf ...文件),我有来自硬件实验室工具包的未签名的 .hlkx 驱动程序包。我可以在不提交Microsoft网站的情况下为我的驱动程序签名吗?

你可以

  1. 将 HLK 工作室安装到插入 EV 令牌的计算机;
  2. 使用 EV 令牌将未签名的 .hlkx 文件复制到计算机;
  3. 当你从 pt1 启动 HLK Studio 时,它将打开 .hlkx 文件,指定它;
  4. 在 HLK Studio 的"包"选项卡上,照常创建包。

阿列克谢提供的答案对我不起作用,我最终使用了这个页面的源代码:

https://msdn.microsoft.com/en-us/library/windows/hardware/mt674914%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

我不得不做一些额外的调整:

在使用它之前,请确保 EV 证书位于您的个人证书存储中。在USB令牌的工具中,您应该能够打开证书并选择"安装证书"。

在 Visual Studio 中创建一个新的控制台应用程序,并将此源代码粘贴到其中。安装 nugget 包 "WindowsBase" 以获取 System.IO.Packaging 命名空间。

通过一些额外的源代码,我们可以让它工作:

class Program
{
    static void Main(string[] args)
    {
        X509Store store = new X509Store("My");
        store.Open(OpenFlags.ReadOnly);
        X509Certificate2 evCert = null;
        foreach (X509Certificate2 mCert in store.Certificates)
        {
            if (mCert.Thumbprint == "3DF652D7EyourThumbprintF")
            {
                evCert = mCert;
            }
        }
        Sign(@"C:PathToYourHLKXFile.hlkx", evCert);
    }
    public static void Sign(string package, X509Certificate2 certificate)
    {
        // Open the package to sign it
        Package packageToSign = Package.Open(package);
        // Specify that the digital signature should exist 
        // embedded in the signature part
        PackageDigitalSignatureManager signatureManager = new PackageDigitalSignatureManager(packageToSign);
        signatureManager.CertificateOption = CertificateEmbeddingOption.InCertificatePart;
        // We want to sign every part in the package
        List<Uri> partsToSign = new List<Uri>();
        foreach (PackagePart part in packageToSign.GetParts())
        {
            partsToSign.Add(part.Uri);
        }
        // We will sign every relationship by type
        // This will mean the signature is invalidated if *anything* is modified in                           //the package post-signing
        List<PackageRelationshipSelector> relationshipSelectors = new List<PackageRelationshipSelector>();
        foreach (PackageRelationship relationship in packageToSign.GetRelationships())
        {
            relationshipSelectors.Add(new PackageRelationshipSelector(relationship.SourceUri, PackageRelationshipSelectorType.Type, relationship.RelationshipType));
        }
        try
        {
            signatureManager.Sign(partsToSign, certificate, relationshipSelectors);
        }
        finally
        {
            packageToSign.Close();
        }
    }
}

将指纹替换为 EV 证书 SHA1。

最新更新