서명 된 인증서를 확인하지 않고 파일에 디지털 서명이 있는지 확인하는 간단한 방법은 있습니까?실제로 서명을 확인하지 않고 파일에 디지털 서명이 있는지 확인합니다.
디렉토리에 exe & dll 파일의 긴 목록을 서명하고 싶지만 아직 서명되지 않은 파일 만 서명하고 싶습니다.
예를 들어 파일 중 하나에 Microsoft 또는 다른 제 3자가 서명 한 경우 회사 인증서로 다시 서명하지 않으려 고합니다.
파일을 마우스 오른쪽 버튼으로 클릭하고 속성 (디지털 서명 탭이 나타나면 서명 된 경우)을 보면 파일에 디지털 서명이 있는지 여부를 쉽게 확인할 수 있습니다. C#을 사용하여이 디지털 서명 속성을 확인하는 간단한 방법을 찾고 있습니다.
지금은 signtool.exe와 함께 verify 명령을 사용하고 있습니다. 디지털 서명이 있는지를 확인할뿐만 아니라 파일에 서명하는 데 사용 된 인증서가 신뢰할 수있는 기관에서 발급되었는지 여부도 확인합니다. 나는 자세한 플래그 "/ V"를 사용하고 출력 텍스트가 포함 된 경우 확인하고 있습니다
private static Boolean alreadySigned(string file)
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.FileName = "signTool.exe";
startInfo.Arguments = "verify /v " + file;
startInfo.UseShellExecute = false;
Process process = new Process();
process.StartInfo = startInfo;
process.EnableRaisingEvents = true;
process.Start();
process.WaitForExit();
string output = process.StandardOutput.ReadToEnd();
return output.Contains("Signing Certificate Chain:");
}
공지 사항 : 여기
이 일을 내 간단하면서도 투박한 접근 방식이다 "서명 인증서 체인을" - 그 문자열은 항상 서명 된 파일의 출력에 있음을 알았 기 때문에 - 서명되지 않은 파일에서는 생략되었습니다.어쨌든, 어색하지만이 코드는 작업을 완료 한 것으로 보입니다. 한 가지 이유는 파일을 확인하는 명령을 실행하는 데 수백 밀리 초가 걸리기 때문입니다. 파일에 디지털 서명이 있는지 확인하려고하는 인증서를 확인할 필요가 없습니다.
간단히 말해 디지털 서명이 있는지 확인하지 않고도 확인할 수있는 간단한 방법이 있습니까?
p.s. 수백 밀리 초를 걱정하는 것은 까다 롭다 고 생각할 수도 있지만, 수천 개의 파일을 검사하는 경우 추가됩니다. – ksun
느린 이유는 서명을 확인하기 때문이 아니라 모든 파일에 대해 새 프로세스를 생성하기 때문에 속도가 느린 이유입니다. Bouncy Castle과 같이 C# 고유의 디지털 서명 라이브러리를 가져옵니다. –