我正在开发一个应用程序,我必须验证2个文件是否使用相同的证书(使用我们的证书)进行签名。如果没有,则中止该程序。
我在this问题中找到了我应该做的事情:
因此对于第1步,我使用WinVerifyTrust
,然后我阅读了属性,并将它们相互比较。
到目前为止一切都那么好,但如果有人创建了证书,并用它们签署这两个文件呢?然后它仍然有效。我知道,如果此证书未添加为Trusted Publisher,则WinVerifyTrust
将失败。但是,比方说,它被添加为Trusted Publisher。然后它工作。显然我不能在代码中写出“我公司名称”这样的值,并检查属性是否具有此值。
那么如何检查它是否真的是我的证书?如果它真的是一个“值得信赖”的证书,不仅被我或其他人信任吗?
提前致谢!
答案 0 :(得分:0)
如果您有权访问证书颁发者(只是公钥)并且您 信任 那个公钥(您已通过其他方式获得了它 - 它没有& #39;来自您正在验证的证书,您已将其存储在本地等等 - 这是拥有证书链的唯一理由)您只需要验证签名是否有效以确保用户证书有效。证书链只是为了确保您有一个路径来确保证书有效性,直到您信任的根证书(通常是软件分发附带的根证书)
只有在您拥有不同的配置文件或帐户类型时,才需要主题检查(或其他证书字段),具体取决于证书中存储的信息。您对主题格式或包含证书的字段的用途取决于应用程序。通常,人们在证书中嵌入有关用户帐户的信息,以便您可以使用证书来分发帐户信息。
请记住,证书只是一个公钥(以及您希望它用于任何目的的一些其他信息)由受信任的机构签署(这可以是中间证书或根证书),因此,一旦您验证签名,你对内容有中等的信任。如果不访问证书颁发者的私钥(以便能够再次签名),则无法更改证书内容,以便在签名验证正常时可以信任该数据。
如何测试证书是否属于您的证书?当然,它必须由证书颁发者签署(这可以是您或您信任的发行人)并验证发行人是否是其他证书。在公司应用程序的情况下,您必须检查其中一个签名者是否为证书颁发机构(通常对于每个应用程序或应用程序模块,生成一个或多个证书颁发者,每个签名用户证书属于该模块)如果您发现证书链中的颁发者,您可以信任该证书以用于预期用途。