使用SHA-2证书

时间:2015-12-24 14:23:15

标签: excel .net-4.0 vsto digital-signature sha256

我有一个VSTO 2010 Excel加载项,目标是.Net Framework 4.0,Visual Studio 2010.

过去几年,我们使用SHA-1证书签署清单和程序集。该应用程序已部署给许多最终用户。现在,随着SHA-1弃用政策从2016年1月开始生效,CA发布的续订证书使用SHA-256进行密钥管理。

请使用各种版本的Visual Studio查看通过构建Excel 2010 VSTO加载项生成的文件:

注意:使用SHA-2算法键入用于以下所有情况的证书。

.VSTO由VS 2010 SP1生成,目标框架4.0:

DigestMethod dependentAssembly提到的hash算法是SHA1,即使使用了SHA2证书也是如此。

<dependentAssembly dependencyType="install" codebase="ExcelAddIn1.dll.manifest" size="18274">
    <assemblyIdentity name="ExcelAddIn1.dll" version="1.0.0.1" publicKeyToken="2142698160a31911" language="neutral" processorArchitecture="msil" type="win32" />
    <hash>
        <dsig:Transforms>
            <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
        </dsig:Transforms>
        <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
        <dsig:DigestValue>DIGEST VALUE</dsig:DigestValue>
    </hash>
</dependentAssembly>

publisherIdentity标记下,使用的SignatureMethodDigestMethod SHA256 ,这取决于证书的算法。

<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256" />

<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />

.VSTO由VS 2013 SP4和VS 2015生成,目标框架4.0:

请注意<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />标记中提到的算法是 SHA1 。这与VS 2010生成的内容相同。

<dependentAssembly dependencyType="install" codebase="ExcelAddIn1.dll.manifest" size="16058">
    <assemblyIdentity name="ExcelAddIn1.dll" version="1.0.0.0" publicKeyToken="2142698160a31911" language="neutral" processorArchitecture="msil" type="win32" />
    <hash>
        <dsig:Transforms>
            <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
        </dsig:Transforms>
        <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
        <dsig:DigestValue>DIGEST VALUE</dsig:DigestValue>
    </hash>
</dependentAssembly>

同样,在publisherIdentity代码下,SignatureMethodDigestMethod仍在使用 SHA1 。使用VS 2010和VS 2013 SP1构建的.vsto文件在此处具有 SHA2

<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />

<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />

即使在2016年1月17日之后,这项工作是否会得到支持?

.VSTO由VS 2013 SP4和VS 2015生成,目标框架4.5.2:

请注意<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha2" />标记中提到的算法 SHA2

<dependentAssembly dependencyType="install" codebase="ExcelAddIn1.dll.manifest" size="16058">
    <assemblyIdentity name="ExcelAddIn1.dll" version="1.0.0.0" publicKeyToken="2142698160a31911" language="neutral" processorArchitecture="msil" type="win32" />
    <hash>
        <dsig:Transforms>
             <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
        </dsig:Transforms>
        <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha2" />
        <dsig:DigestValue>DIGEST VALUE</dsig:DigestValue>
    </hash>
</dependentAssembly>

SignatureMethodDigestMethod现在指示 SHA2 算法。

<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha2" />

<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha2" />

似乎VS 2013 SP3中的更新(在VS 2015中也可用)正在根据目标.Net框架使用/强制执行算法。

对于.Net Framework 4.0,DigestMethod和SigntureMethod始终为SHA1,与所使用的证书无关。现在,加载项适用于只有.Net 4.0的机器,因为VSTO / clickonce加载器根本不需要处理SHA2。

因此,考虑到从2016年1月开始必须使用SHA-2证书,用于使用SHA-2证书对加载项进行签名的配置应该是什么?

  1. VS 2010,.Net Framework 4.0和SHA-2证书(如果没有安装.Net Framework 4.5或更新版本,则无法运行)

  2. VS 2015,.Net Framework 4.0和SHA-2证书(这与使用SHA-1证书没什么不同.VSTO文件只有SHA-1条目,不知道这是否可行2016年1月)

  3. VS 2015,.Net Framework 4.5.2和SHA-2证书(不适合我。我需要将目标框架保持为4.0)

  4. 我正在离线安装机器上的Excel加载项。它们总是从文件系统加载。

    [HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\Addins\ExcelAddin1]
    "Description"="ExcelAddin1 - COM add-in created with Visual Studio Tools for Office"
    "FriendlyName"="ExcelAddin1"
    "Manifest"="file:///C:/published/Addins/ExcelAddin1.vsto|vstolocal"
    "LoadBehavior"=dword:00000003
    

    谢谢。

0 个答案:

没有答案