使用SHA-2证书签署面向.NET Framework 4.0的VSTO Excel加载项

CS.*_*CS. 5 excel vsto .net-4.0 sha256 digital-signature

我有一个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算法键入用于以下所有情况的证书.

VS 2010 SP1,Target Framework 4.0生成的.VSTO:

DigestMethod对于所提到的算法dependentAssemblyhash是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>
Run Code Online (Sandbox Code Playgroud)

publisherIdentity标签,所述SignatureMethodDigestMethod使用是SHA256,这是根据该证书的算法.

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

<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
Run Code Online (Sandbox Code Playgroud)

.VSCO由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>
Run Code Online (Sandbox Code Playgroud)

同样,根据publisherIdentity标签,SignatureMethod并且DigestMethod仍在使用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" />
Run Code Online (Sandbox Code Playgroud)

即使在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>
Run Code Online (Sandbox Code Playgroud)

SignatureMethodDigestMethod现在正指示SHA2算法.

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

<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha2" />
Run Code Online (Sandbox Code Playgroud)

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

对于.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)

我在脱机的机器上安装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
Run Code Online (Sandbox Code Playgroud)

谢谢.