验证签名word文档的正确方法是什么?

时间:2018-02-05 18:58:56

标签: .net powershell ms-word digital-signature openxml-sdk

根据"The Digital Signing Framework of the Open Packaging Conventions",.docx文件本质上是各种“部件”的zip文件,签署.docx是指包含.docx容器中某些部分子集的签名的方法。但是没有提到哪个部分子集构成了有效的签名。有一节描述.XPS“应用程序签名策略”,但没有相同的.DOCX。 Packaging API告诉我哪些部分已签名以及它们的签名是否有效,但似乎需要程序员确保所有需要签名的部分都在签名列表中。链接的文件只是说:

  

使用基于包的格式的应用程序将自己的策略定义为   签署框架的一部分。该政策由要素决定   格式的类型和工作流程要求。

我如何知道Word文档的正确策略是什么?

例如,使用Word 2013签署一个简单的Word文档,并使用Packaging API枚举已签名的部分,表明并非所有部件都已签名。特别是,/docProps/core.xml(似乎包含文档“所有者”)未签名:

Add-Type -Assembly WindowsBase
$f = "My Signed File.docx"
$p = [System.IO.Packaging.Package]::Open($f)
$dsm = [System.IO.Packaging.PackageDigitalSignatureManager]::new($p)
$p.GetParts() | ForEach-Object {$_.Uri.ToString()}
$dsm.Signatures | ForEach-Object {$_.SignedParts} | ForEach-Object {$_.ToString()}

打印(所有部分):

/docProps/app.xml
/docProps/core.xml
/word/document.xml
/word/fontTable.xml
/word/settings.xml
/word/styles.xml
/word/theme/theme1.xml
/word/webSettings.xml
/word/_rels/document.xml.rels
/_rels/.rels
/_xmlsignatures/origin.sigs
/_xmlsignatures/sig1.xml
/_xmlsignatures/_rels/origin.sigs.rels

和(签名部分):

/word/document.xml
/word/fontTable.xml
/word/settings.xml
/word/styles.xml
/word/theme/theme1.xml
/word/webSettings.xml

1 个答案:

答案 0 :(得分:0)

首先,就此而言......

  

'我如何知道Word文档的正确策略是什么?'

自从真正的DLP / IP工具提供以来,数字签名并不是真正的政策。它们只是大多使用的身份属性。 如果您正在查看真实的策略,那就是AD RMS / Azure信息保护解决方案等的用途。

以下是我对此数字签名主题的说明,与验证相关。

所有这些签名都是通过Microsoft CAPI NG API。

  

https://msdn.microsoft.com/en-us/library/windows/desktop/aa376210(v=vs.85).aspx

     

https://msdn.microsoft.com/en-us/library/windows/desktop/aa376214(v=vs.85).aspx

在我看到的几乎所有情况中,这都将涉及证书,自签名,域名颁发或外部3rdP证书。

当您在Word中打开已签名的文档时,您会看到“签名”和“#39;签名' UI中的按钮(红色功能区),它转换为Word DOM中的事实。因此,谨慎的方法是导航DOM以查看验证的位置。

  

https://support.office.com/en-us/article/View-digital-signature-and-certificate-details-76BA00CB-1E58-42AA-8717-0CAEE76BB3CF

现在,所说的一切,意思是,你正在看的所有道具。您可以直接查看签名布尔证据。

  

http://technet.microsoft.com/en-us/sysinternals/bb897441.aspx

sigcheck.exe -a -u -e

您可以利用signtool.exe

  

http://msdn.microsoft.com/en-us/library/windows/desktop/aa388171%28v=vs.85%29.aspx

     

https://msdn.microsoft.com/en-us/library/aa387764.aspx

# sign - Digitally signs files.
# verify - Verifies the digital signature of files.

signtool verify /pa myfile.exe
if %ERRORLEVEL% GEQ 1 echo This file is not signed.

# verbose out put, add a '/v' after '/pa'.

PoSH可以使用以下cmdlet vs mining doc属性查看文件签名。但是,这并不是所有这些属性,只是信号。

 Get-AuthenticodeSignature 'C:\windows\explorer.exe'

您当然可以.NET检索签署该文件的证书,从而获得所有者。