2016-03-01 207 views
1

我已經使用Hardware Lab Kit中的我的USB設備完成了所有測試,現在可以準備要在Microsoft網站上提交的.hlkx驅動程序包。我可以使用EV證書在Microsoft網站上手動簽署.hlkx文件

問題是Windows 10驅動程序需要EV證書。 EV證書隨Safenet USB令牌一起提供,此USB令牌遠離安裝了Hardware Lab Kit的計算機,因此我無法自動在Hardware Lab Kit中籤署.hlkx包。

問題是如何讓我的Windows 10的USB驅動程序簽名?我有未簽名的驅動程序(sys,cab,inf ...文件),並且我沒有簽署Hardware Lab Kit的.hlkx驅動程序包。我可以在不提交微軟網站的情況下籤署我的驅動程序嗎?

回答

1

您可以

  1. 安裝HLK工作室到EV令牌已插入計算機;
  2. 將無符號.hlkx文件複製到裝有EV令牌的計算機;
  3. 當您從pt1啓動HLK Studio時,它會提示打開.hlkx文件,指定它;
  4. 在HLK Studio的包選項卡上照常創建包。由阿列克謝提供
+0

Package選項卡上現在有「Create package」。只有「合併包」和「添加驅動程序文件夾」 –

0

回答沒有爲我工作,我最終使用的源代碼從該頁面:

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

我不得不做一些額外的調整:

使用前這樣,請確保EV證書在您的個人證書存儲區中。在您使用USB令牌的工具中,您應該可以打開證書並選擇「安裝證書」。

在visual studio中創建一個新的控制檯應用程序並粘貼此源代碼。 安裝塊體包「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。

相關問題