我有一个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
标记下,使用的SignatureMethod
和DigestMethod
为 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
代码下,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" />
即使在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>
SignatureMethod
和DigestMethod
现在指示 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证书对加载项进行签名的配置应该是什么?
VS 2010,.Net Framework 4.0和SHA-2证书(如果没有安装.Net Framework 4.5或更新版本,则无法运行)
VS 2015,.Net Framework 4.0和SHA-2证书(这与使用SHA-1证书没什么不同.VSTO文件只有SHA-1条目,不知道这是否可行2016年1月)
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
谢谢。