3

VSIX 파일로 패키지 된 Visual Studio 2012 extension에 서명하려고합니다.Visual Studio 2012 VSIX 확장명에 디지털 서명

나는 지침을 따라 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 

나는 그것이 MSI에 대한 작업을 수행하지만이 명령은, VSIX 파일을 작동하지 않는 것을 이해 아카이브.

이 명령을 사용하면 signtool을 호출 할 때 암호 또는 pfx 파일을 지정할 필요가 없습니다. 지정된 제목 MySubjectName을 사용하여 가장 설치된 인증서가 선택됩니다. 나를 X509Certificate을 찾을 수 있습니다 PackageDigitalSignatureManager 관련된 모든 API가 있나요

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)); 
} 

: Jeff's Blog의 코드에 따라

, 서명 단계는 서명에 사용 된 X509Certificate2를 만들기 위해 정의 할 PFX 파일 이름과 암호가 필요 MySubjectName에 기반하여 서명 할 수 있습니까?

+0

이 내가 찾던 답을 포함 할 수 있습니다를 : //msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2collection.find.aspx –

+0

주체 이름으로 인증서를 가져 오는 API는 없습니다. 그러나 X509Certificate2 클래스의 Import 메서드를 살펴볼 수 있습니다. – Sasha

답변

1

저는 현재 사용자의 저장소에서 발견 된 인증서를 반복하여 해결했습니다. 나는 발행자 이름으로 필터링하고 일치하는 인증서를 통해 나는 루프에만 유효 인증서를 가지고도 주체 이름과 일치하는 첫 번째 반환 : HTTP :

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; 
}