对使用SHA-2证书的.NET Framework 4.0进行签名的VSTO Excel加载项签名

我有一个VSTO 2010 Excel加载项,面向.Net Framework 4.0,Visual Studio 2010。

过去几年我们使用SHA-1证书来签署清单和程序集。 该应用程序已经为很多最终用户部署。 现在,随着SHA-1弃用政策从2016年1月开始生效,已由CA颁发的更新证书使用SHA-256进行密钥pipe理。

请查看使用各种版本的Visual Studio构buildExcel 2010 VSTO加载项所生成的文件:

注意:以下所有情况下使用的证书都使用SHA-2algorithm进行密钥input。

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

dependentAssemblyhash提到的DigestMethodalgorithm是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标签下,所使用的SignatureMethodDigestMethodSHA256 ,它是根据证书的algorithm。

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

由VS 2013 SP4和VS 2015,Target Framework 4.0生成的.VSTO:

请注意, <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />标记中提到的algorithm是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构build的.vsto文件在此处具有SHA2

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

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

VS 2013 SP4和VS 2015,Target Framework 4.5.2生成的.VSTO:

请注意, <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha2" />标记中提到的algorithm是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现在正在指示SHA2algorithm。

 <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框架的algorithm。

对于.Net Framework 4.0,DigestMethod和SigntureMethod始终是SHA1,与所使用的证书无关。 现在,只有.Net 4.0作为VSTO / clickonce加载器的机器上的加载项才能完全不必处理SHA2。

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

  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 

谢谢。