예,없고. 당신은 "인증서보기"를 누르면 당신의 UI 워크 플로우에서
당신은 CertUI 대화에 대화 파일 속성에서 전환 할 수 있습니다. CertUI (아마)는 leaf/end-entity 인증서 만보고 cert chain 자체를 만듭니다. 그래서 그 시점에서 서명 된 파일에 무엇이 있었는지에 대해서는 약간 부정적입니다.
당신은 파일에 포함 된 인증서 정보를 모두 읽어 약간 더 하나의 호출에서 얻을 수 있습니다. 로컬 테스트에서는 EE 인증서 (서명해야 함)와 중간 CA (서명 라인 없음)를 작성했지만 루트 인증서는 작성하지 않았 음을 보여줍니다 (일반적으로 전송시 루트 인증서를 생략하기 때문에 ...) 그것은 그것을 신뢰하지 않을 것입니다, 그래서 그것은 낭비 된 바이트입니다).
var coll = new X509Certificate2Collection();
coll.Import("signedfile.exe");
// My coll had 2 certs at this point.
그래서 당신은 중간체를 해결하는 도움을 필요로하는 경우에 X509Chain.ChainPolicy.ExtraStore
에 그 모든 인증서를 전달할 수 있지만, 여전히 체인을 구축 할 필요가 원인을 알 수 있습니다.
using (X509Certificate2 cert = new X509Certificate2("signedfile.exe"))
{
X509Chain chain = new X509Chain();
chain.ChainPolicy.VerificationFlags = X509VerificationFlags.IgnoreNotTimeValid;
bool validChain = chain.Build(cert);
if (!validChain)
{
// Whatever you want to do about that.
foreach (var status in chain.ChainStatus)
{
// In reality you can == this, since X509Chain.ChainStatus builds
// an object per flag, but since it's [Flags] let's play it safe.
if ((status.Status & X509ChainStatusFlags.PartialChain) != 0)
{
// Incomplete chain.
}
}
}
X509Certificate2Collection chainCerts = new X509Certificate2Collection();
foreach (var element in chain.ChainElements)
{
chainCerts.Add(element.Certificate);
}
// now chainCerts has the whole chain in order.
}
나는 당신이 나를 가리키는 위해 [이] (http://stackoverflow.com/a/9152838/4684493) 대답에 – Hintham
감사 볼 필요가 있다고 생각합니다. 의심 스러울만큼, 그것은 X509Certificate2 개체를 사용하여 나에게 잎 노드를 줄 것으로 보인다. 그러나이 질문에 대한 예제는 서명 된 실행 파일에서 가져 오기가 필요한 동안 인증서 파일 (예 : pfx)을 사용하여 전체 체인을 가져 오는 것에 대해서만 설명합니다. 그게 가능하니? – MrPiao
알았어. 당으로 [이] (http://security.stackexchange.com/questions/50959/how-to-check-executable-code-signing-signatures) 당신은'X509Certificate'을에서'X509Certicate2'을 만들 수있을 것입니다 서명 된 실행 파일에서 가져옵니다. 이렇게하면 확인할 수있는 인증서 체인을 만들 수 있습니다. 대략 :'var cert = X509Certificate.CreateFromSignedFile ("path \ to \ signed_file"); var cert2 = new X509Certificate2 (cert); 그리고 나서'var chain = new X509Chain(); var isValid = chain.Build (cert2); ' – Hintham