2016-07-12 24 views
1

C#을 사용하고있는 프로젝트에서 .exe 파일 중 하나의 신뢰를 확인하고 싶습니다.인터넷에 연결되지 않은 컴퓨터에서만 WinVerifyTrust()가 실패하는 이유는 무엇입니까?

은 내가 언급 한 - http://pinvoke.net/default.aspx/wintrust/WinVerifyTrust.html

가 여기 내 코드입니다.

WinTrustData wtd = new WinTrustData(filename); 
Guid guidAction = new Guid(WINTRUST_ACTION_GENERIC_VERIFY_V2); 
WinVerifyTrustResult result = WinVerifyTrust(INVALID_HANDLE_VALUE, guidAction, wtd); 
bool valid = (result == WinVerifyTrustResult.Success); 

파일 이름 - .exe 파일 경로입니다.

위의 코드에서 언급 한 WinVerifyTrust()는 컴퓨터가 적어도 한 번 이상 인터넷에 연결되어있는 경우에만 "WinVerifyTrustResult.Success"를 반환합니다.

그러나 새 컴퓨터에서는 "0x800b0100"즉 "Trust_e_nosignature"를 반환합니다.

예상되는 동작입니까? 그렇다면 어떻게 해결할 수 있습니까?

이 특정 동작을 검색했지만 만족스러운 답변을 찾지 못했습니다.

+0

이것은 실제 생활과 다르지 않습니다. 주택을 누군가에게 판매하는 경우 구매자가 자신이 말하는 사람이라고 믿을 수 있는지 어떻게 확인할 수 있으며 계약서에 서명하면 법적 문서가됩니다. 당신은 공증인에게 가십시오, 당신은 집에서 나와야합니다. 여기 공증인은 Verisign과 같은 인증서 발급 기관입니다. 집에서 나오려면 인터넷 연결이 필요합니다. –

답변

2

Windows (7+)는 매우 제한된 루트 인증서 집합과 함께 제공됩니다.

필요에 따라 다운로드됩니다. 이것은 컴퓨터가 전에 인터넷에 연결되지 않은 경우 authenticode 서명을 확인할 수없는 이유 일 수 있습니다. (하지만 여전히 인터넷에 연결하는 것만으로는 충분하지 않지만 https 페이지로 이동하거나 authenticode 서명을 확인하는 것 "올바른"루트 인증서가 다운로드되도록해야합니다).

인터넷에 연결하기 전후에 인터넷 익스플로러에 설치된 CA 인증서를 확인/계산하여 확인할 수 있습니다.

+0

안녕하세요 MrTux, 빠른 응답을 보내 주셔서 감사합니다. 프록시 설정을 추가하면 내 문제가 해결됩니다. 그러나 우리의 경우, 의도적으로 인터넷에 연결하고 싶지 않은 사용자가 많습니다. 그러면 매우 어려워집니다. 내 질문은 - 이런 상황을 피하는 법입니다. 사용자가 컴퓨터에서 수행하도록 설정할 수있는 설정을 알고 있습니까? 또는이 API와 인터넷 연결이 필요합니다. – Tausif

+1

나는 필요한 루트 인증서를 수동으로 설치하거나 액티브 디렉토리 또는 무언가를 사용하는 것 이외에 해결 방법을 모르고있다. 또한 Windows 자체도 루트 CA 인증서가없는 서명을 확인할 수 없습니다. – MrTux

+0

또한 루트 인증서가 포함 된 메모리에 자신의 certstore를 설정하고 여기에 설명 된 것과 같이 확인하여 더 많은 수동 인증서 확인을 시도 할 수 있습니다. http://stackoverflow.com/q/2008519/3906760 – MrTux