2011-03-09 102 views
2

我有正被用作在因特网浏览器 所示的网页中的ActiveX控件一个COM可见.NET DLL文件。签名.NET DLL

本身是可以正常使用(虽然有一些注意事项)通过时从网页JavaScript代码调用的控制。

问题带有签名的DLL和有它可靠地访问。我(据我所知)在Visual Studio中签署项目。在项目'Signing'的属性中,我创建了一个.pfx文件并使用它来签署DLL。

在Internet  浏览器,无论我做什么,我不能让互联网 浏览器,让ActiveX控件的加载,而无需手动进入安全设置和更改“下载未签名的ActiveX控件”和“初始化和脚本的ActiveX控件没有标记为安全的脚本'选项来启用/提示。

+0

请明确地制定您的问题 – 2011-03-09 15:08:12

回答

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中列出的受信任的根证书颁发机构之一颁发代码签名证书。如果你想要这个工作无处不在,你就需要从预装的可信根(如威瑞信)的一个购买的证书

(证书查看工具| Internet选项| |内容)。

如果这是为了在Intranet上贵公司可以创建自己的自签名证书,并将其应用到所有的浏览器。

如果你只是测试你可以创建自己的自签名的根和IE自行安装。

(即使正确签名的我不知道,最近的IE版本会自动不问用户第一次安装任何ActiveX控件。)

+0

好的 - 如果它要求用户我不介意 - 我只是需要不已修改该步骤的安全设置。我有一个支付证书,但它已经很老了(可能是2005?),并且在签署时遇到了问题。我会研究一下为什么这样做会失败,并且在那之前加上我提到的自签名证书。谢谢。 – elbweb 2011-03-09 15:40:29

+0

他们通常只会持续一年或两年。如果您右键单击签名的DLL并选择“属性”,然后选择“数字签名”,您可以看到您拥有的内容。 – arx 2011-03-09 15:52:30

+0

如果它没有数字签名选项卡,是否意味着它没有正确签名?我拥有的当前DLL(由临时密钥签名)在其属性中没有任何类似的内容。 – elbweb 2011-03-09 16:00:23