如何以编程方式处理充当其自己的证书颁发机构CA的应用程序的数百个实例

问题描述

我想使用C#访问将在数百甚至数千台服务器上运行并充当其自己的证书颁发机构(CA)的应用程序的API。

最初,我在建立SSL / TLS信任关系时遇到问题。我了解到可以将curl与“ --insecure”参数一起使用来建立连接,但我知道从安全角度来看,这是不合时宜的。

研究如何使用C#进行相同操作时,我发现了多个示例(Link),这些示例使我可以关闭SSL / TLS身份验证。

示例:

ServicePointManager.ServerCertificateValidationCallback = (obj,X509certificate,chain,errors) => true;

然后我发现我可以从服务器上的应用程序检索“证书”并将其保存在客户端系统上的文件中。

示例:

-----BEGIN CERTIFICATE-----
MIICajCCAdOgAwIBAgIIaFSnqgAAAAAwBZYJKoZIhvcNAQENBQAwNzEOMAwGA1UE
...
rvqtlUd9krLEN3HQZ94kw4l1nv5JPMqNdeDZEOcSzuA32Saz/gIACEU9lJ5S6w==
-----END CERTIFICATE-----

同样,我可以使用“ --cacert”参数和服务器应用程序中包含cert的文件名称来进行curl测试。这使我避免使用“ --insecure”参数,并使用从应用程序下载的证书进行安全连接

我想创建一个C#程序,该程序使用应用程序提供的“ cacert”并存储在我的客户端上的“ cacert.pem”文件中,以与应用程序建立信任关系。基本上,我试图模仿上面描述的“ curl --cacert”功能

这是一个控制台应用程序,我正计划使用“ .Net Core”,希望将来将该应用程序移植到Linux / MacOS。

其他问题:

  • 我一直在使用HTTPWebRequest来构成API调用,据我了解有点过时。我应该改用HTTPClient吗?

  • 我应该尝试使用Windows信任存储代替我自己的“ cacert.pem”文件吗?尤其要注意以下几点:

    1. 我希望该应用程序可移植到Linux / MacOS。
    2. 由于该应用程序有成千上万个实例,因此我可能拥有数千个证书。
  • 我仍在学习证书。应用程序“证书”是否与自签名证书相同?还是因为应用程序说它正在充当自己的证书颁发机构而不同?

对于一个问题/帖子,这似乎很多。我不确定是否应该将其放在一起,因此将其分为多个问题更有意义...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)