gpt4 book ai didi

c - 验证签名/证书的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-30 17:23:01 27 4
gpt4 key购买 nike

我正在开发一个应用程序,我必须验证两个文件是否使用相同的证书(使用我们的证书)进行签名。如果没有,则中止程序。

我在 this 中找到问题,我应该做什么:

  1. 彻底验证证书链,确保证书的完整性和真实性
  2. 检查发行人名称
  3. 检查主题名称
  4. 检查 key 使用字段。

因此,对于第 1 步,我使用 WinVerifyTrust,然后读取属性,并将它们相互比较。
到目前为止一切顺利,但是如果有人创建一个证书并用它们签署这两个文件怎么办?那么它仍然会起作用。我知道,如果未将此证书添加为受信任的发布者,则 WinVerifyTrust 将失败。但假设它被添加为受信任的发布者。然后就可以了。显然我无法在代码中写入“我的公司名称”之类的值,并检查属性是否具有该值。

那么我如何检查它是否真的是我的证书呢?如果它真的是一个“受信任”的证书,不仅被我或其他人信任?

提前致谢!

最佳答案

如果您有权访问证书颁发者(仅公钥)并且您信任该公钥(您已通过其他方式获取它 --- 它不会没有附带您正在验证的证书,您已经将其存储在本地或类似的地方——这是拥有证书链的唯一原因)您只需验证签名是否有效以确保用户证书是有效的。证书链只是为了确保您有一条路径来确保您信任的根证书(通常是软件发行版附带的根证书)的证书有效性

仅当您根据证书中存储的信息拥有不同的配置文件或帐户类型时,才需要主题检查(或其他证书字段)。您对证书随附的主题格式或字段的用途取决于应用程序。通常,人们会在证书中嵌入有关用户帐户的信息,以便您可以使用证书来分发帐户信息。

请记住,证书只是由受信任的颁发机构(可以是中间证书或根证书)签署的公钥(以及用于您希望其用于任何目的的其他一些信息),因此,一旦您验证签名,您就会立即信任内容。如果不访问证书颁发者的私钥(以便能够再次对其进行签名),则无法更改证书内容,因此在签名验证正确的情况下,您可以信任该数据。

如何测试证书是否真的是您的?当然,它必须由证书颁发者(可以是您或您信任的颁发者)签名,并验证颁发者是该颁发者而不是其他证书。如果是公司应用程序,则必须检查其中一个签名者是否是证书颁发机构(通常对于每个应用程序或应用程序模块,会生成一个或不同的证书颁发者,每个证书颁发者都签署属于该模块的用户证书),如果您发现证书链中的该颁发者,那么您可以信任该证书用于预期用途。

关于c - 验证签名/证书的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27783031/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com