如何在 ServerCertificateValidationCallback 中使用代码实现仅信任一个特定证书(我自己的)
How can I implement trust only one specific certificate (my own) using code, in ServerCertificateValidationCallback
上下文
客户端代码必须连接到远程 Web api。 SSL 是强制性的,因为在线路上交换的敏感信息。我们有自己颁发的证书
在该项目中,目前没有在远程 IIS 中正确配置的内容,并且测试一切正常,除了证书不受信任。
我知道我可以在本地机器上安装证书并信任它。但是由于某些原因(例如,也有 Xamarin Android 客户端),它不是合适的解决方案。
当前的解决方法是简单地忽略代码中的证书错误,它在桌面和 Android Xamarin:
上都有效
ServicePointManager.ServerCertificateValidationCallback =
(s, certificate, chain, sslPolicyErrors) =>
{
// Here I would like to check against that the certificate
// is the specific one I issued, and only that case return with true
// if (what is the most suitable to write here?)
return true;
};
问题
注意:这是 development/testing 阶段。在生产中,将安装由受信任的证书颁发机构创建的证书。
现在觉得接受什么都不好,所以想缩小范围。
如何检查证书是否是我颁发的特定证书,并且只有 return 为真。
运行 代码、放置断点并获取 certificate.Thumbprint,然后编写一个 if 来检查它是否是一个可行的想法?
(编辑)
...或更好...获取 PublicKeyString 并对其进行检查?
恕我直言,检查指纹是一个不错的选择。使用指纹,您可以将信任范围缩小到一个证书。
检查 public 密钥或主题密钥标识符也可以,但您会将信任扩展到同一密钥对。同一个 public 密钥可以颁发多个证书(有或没有相同的专有名称)。
正如@bartonjs 所述,另一种选择是检查原始数据。这种方法与检查指纹具有相同的功能。 IMO 这样做的好处是,当您在一年后查看代码时,您仍然会知道您信任哪个证书:)
无论如何,在检查确切的证书时请记住,证书总有一天会过期(也就是说,如果我没记错的话,让我们加密颁发 3 个月的证书),并且您的应用程序将必须使用新的证书检查重新部署。您必须跟踪证书的到期日期。
上下文
客户端代码必须连接到远程 Web api。 SSL 是强制性的,因为在线路上交换的敏感信息。我们有自己颁发的证书 在该项目中,目前没有在远程 IIS 中正确配置的内容,并且测试一切正常,除了证书不受信任。
我知道我可以在本地机器上安装证书并信任它。但是由于某些原因(例如,也有 Xamarin Android 客户端),它不是合适的解决方案。
当前的解决方法是简单地忽略代码中的证书错误,它在桌面和 Android Xamarin:
上都有效ServicePointManager.ServerCertificateValidationCallback =
(s, certificate, chain, sslPolicyErrors) =>
{
// Here I would like to check against that the certificate
// is the specific one I issued, and only that case return with true
// if (what is the most suitable to write here?)
return true;
};
问题
注意:这是 development/testing 阶段。在生产中,将安装由受信任的证书颁发机构创建的证书。
现在觉得接受什么都不好,所以想缩小范围。 如何检查证书是否是我颁发的特定证书,并且只有 return 为真。 运行 代码、放置断点并获取 certificate.Thumbprint,然后编写一个 if 来检查它是否是一个可行的想法?
(编辑) ...或更好...获取 PublicKeyString 并对其进行检查?
恕我直言,检查指纹是一个不错的选择。使用指纹,您可以将信任范围缩小到一个证书。
检查 public 密钥或主题密钥标识符也可以,但您会将信任扩展到同一密钥对。同一个 public 密钥可以颁发多个证书(有或没有相同的专有名称)。
正如@bartonjs 所述,另一种选择是检查原始数据。这种方法与检查指纹具有相同的功能。 IMO 这样做的好处是,当您在一年后查看代码时,您仍然会知道您信任哪个证书:)
无论如何,在检查确切的证书时请记住,证书总有一天会过期(也就是说,如果我没记错的话,让我们加密颁发 3 个月的证书),并且您的应用程序将必须使用新的证书检查重新部署。您必须跟踪证书的到期日期。