1

我已经在 Hardware Lab Kit 中使用我的 USB 设备完成了所有测试,现在可以准备 .hlkx 驱动程序包以在 Microsoft 网站上提交。

问题是 Windows 10 驱动程序需要 EV 证书。EV 证书随 Safenet USB 令牌提供,并且此 USB 令牌远离安装了 Hardware Lab Kit 的计算机,因此我无法在 Hardware Lab Kit 中自动签署 .hlkx 包。

问题是如何让我的 Windows 10 USB 驱动程序签名?我有未签名的驱动程序(sys、cab、inf ... 文件),并且我有来自 Hardware Lab Kit 的未签名的 .hlkx 驱动程序包。我可以在不提交到 Microsoft 网站的情况下签署我的驱动程序吗?

4

2 回答 2

1

你可以

  1. 将HLK Studio安装到插有EV token的电脑上;
  2. 将未签名的 .hlkx 文件复制到带有 EV 令牌的计算机;
  3. 当您从 pt1 启动 HLK Studio 时,它会提示打开 .hlkx 文件,指定它;
  4. 在 HLK Studio 的包选项卡上照常创建包。
于 2017-02-04T10:25:13.153 回答
0

Alexey 提供的答案对我不起作用,我最终使用了此页面的源代码:

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:\Path\To\Your\HLKXFile.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。

于 2017-06-24T10:45:15.620 回答