[英]Digitally sign a Visual Studio 2012 VSIX extension
我正在嘗試簽署一個打包為VSIX
文件的Visual Studio 2012 extension
。
我已按照http://www.jeff.wilcox.name/2010/03/vsixcodesigning/上的說明進行操作; 但是,我有興趣在不指定pfx文件和密碼的情況下執行簽名。
例如,如果我要調用'signtool.exe',我的命令行將是:
"signtool.exe" sign /n MySubjectName /t 'http://timestamp.verisign.com/scripts/timstamp.dll' /d "MyDescription" MyPackage.vsix
我知道這個命令不適用於VSIX
文件,盡管它適用於MSI
存檔。
使用此命令,調用signtool時無需指定密碼或pfx文件。 使用指定的主題MySubjectName
選擇已安裝的最佳證書。
按照Jeff博客上的代碼,簽名步驟需要定義pfx文件名和密碼以創建簽名中使用的X509Certificate2
:
private static void SignAllParts(Package package, string pfx, string password, string timestamp){
var signatureManager = new PackageDigitalSignatureManager(package);
signatureManager.CertificateOption = CertificateEmbeddingOption.InSignaturePart;
/*...*/
signatureManager.Sign(toSign, new System.Security.Cryptography.X509Certificates.X509Certificate2(pfx, password));
}
是否有任何涉及PackageDigitalSignatureManager
API可能讓我找到基於MySubjectName
的X509Certificate
,以便我可以簽名?
我通過迭代當前用戶商店中的證書來解決這個問題。 我按發行者名稱過濾並只獲取有效證書,然后我循環匹配的證書並返回第一個與主題名稱匹配的證書:
public static X509Certificate2 Find(string issuer, string subject)
{
var certStore = new X509Store (StoreName.My, StoreLocation.CurrentUser);
certStore.Open (OpenFlags.ReadOnly);
var certCollection = certStore.Certificates.Find (X509FindType.FindByIssuerName, issuer, true);
foreach (var cert in certCollection)
{
if (cert.FriendlyName == subject)
{
return cert;
}
}
return null;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.