根据"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
答案 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以查看验证的位置。
现在,所说的一切,意思是,你正在看的所有道具。您可以直接查看签名布尔证据。
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检索签署该文件的证书,从而获得所有者。