2011-03-09 2 views
2

인터넷   탐색기에 표시된 웹 페이지 내에서 ActiveX 컨트롤로 사용되는 COM 표시 .NET DLL 파일이 있습니다.ActiveX 컨트롤로 사용되는 .NET DLL 서명

컨트롤 자체는 웹 페이지에서 JavaScript 코드를 통해 호출 될 때 완벽하게 작동합니다 (일부주의 사항이 있지만).

문제는 DLL 서명에 안정적으로 액세스 할 수 있다는 데 있습니다. 나는 (내가 말할 수있는 한) Visual Studio 내에서 프로젝트에 서명한다. 프로젝트의 '서명'속성에서 .pfx 파일을 만들고이 파일을 사용하여 DLL에 서명했습니다.

인터넷 내에서   탐색기를 사용하면 인터넷에 연결할 수 없습니다.   탐색기에서 수동으로 보안 설정으로 이동하여 '서명되지 않은 ActiveX 컨트롤 다운로드'및 'ActiveX 컨트롤 초기화 및 스크립팅' Enable/prompt 옵션에 대한 스크립팅의 안전 표시가 아닙니다.

+0

명시 적으로 –

답변

5

은 원래 문제는 파일의 서명과는 아무런 관련이없는 것 같다 , 그러나 IObjectSafety의 구현에서. IE를로드 할 수있게하려면 해당 인터페이스를 올바르게 구현해야하며 유효한 서명이 없어도 정상적으로 작동합니다.

간단한 예 :

[ComImport()] 
[Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064")] 
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
interface IObjectSafety 
{ 
    [PreserveSig()] 
    int GetInterfaceSafetyOptions(ref Guid riid, out int pdwSupportedOptions, out int pdwEnabledOptions); 

    [PreserveSig()] 
    int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions); 
} 

그리고 클래스 자체 :

[ProgId("Testing.Test")] 
[ClassInterface(ClassInterfaceType.AutoDispatch)] 
[ComVisible(true)] 
public sealed class Test : IObjectSafety 
{ 
    #region Saftey Interface 
    private const int INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001; 
    private const int INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002; 
    private const int S_OK = 0; 

    [ComVisible(true)] 
    public int GetInterfaceSafetyOptions(ref Guid riid, out int pdwSupportedOptions, out int pdwEnabledOptions) 
    { 
     pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA; 
     pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA; 
     return S_OK; 
    } 

    [ComVisible(true)] 
    public int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions) 
    { 
     return S_OK; 
    } 
    #endregion 

    [ComVisible(true)] 
    public string TestString 
    { 
     get 
     { 
      return 'A Test'; 
     } 
    } 
} 
0

IE가 서명 된 ActiveX 컨트롤을 다운로드하려면 서명을 신뢰해야합니다. 즉, 인증서는 Internet Explorer에 나열된 신뢰할 수있는 루트 인증 기관 중 하나에서 발급 한 코드 서명 인증서 여야합니다.

모든 곳에서 작동하려면 미리 설치된 신뢰할 수있는 루트 (예 : Verisign) 중 하나에서 인증서를 구입해야합니다.

인트라넷에서 작동하려는 경우 회사에서 자체 서명 된 인증서를 만들어 모든 브라우저에 푸시 할 수 있습니다.

테스트중인 경우 자체 서명 된 루트를 만들고이를 IE에 직접 설치할 수 있습니다.

(올바르게 서명해도 내가 IE의 최신 버전이 자동으로 먼저 사용자 동의없이 ActiveX 컨트롤을 설치합니다 모르겠어요.)

+0

좋아 질문을 공식화하십시오 - 그것은 사용자에게 요청하면 난 상관 없어 - 난 그냥하지에 필요하고 해당 단계의 보안 설정을 수정하십시오. 인증서를 지불했는데 꽤 오래되었습니다 (2005 년?). 내가 왜 실패했는지 살펴볼 것이며, 그때까지 언급 한 것처럼 자기 서명 인증서를 추가 할 것입니다. 고맙습니다. – elbweb

+0

일반적으로 1 년 또는 2 년 동안 지속됩니다. 서명 된 DLL을 마우스 오른쪽 단추로 클릭하고 등록 정보를 선택한 다음 디지털 서명을 선택하면 얻은 것을 볼 수 있습니다. – arx

+0

디지털 서명 탭이 없다면 올바르게 서명되지 않았습니까? 현재 DLL (임시 키로 서명 됨)에는 해당 속성에있는 것과 같은 것이 없습니다. 아마도 – elbweb