gpt4 book ai didi

c# - 客户端证书 HttpClient .Net Core Docker Linux

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:18 25 4
gpt4 key购买 nike

我实现了一个内部 REST 服务,它使用另一个(外部)REST 服务。外部服务使用带有客户端证书(和 token )的 HTTPS 进行保护。

在第一个实现中,它是一个基于 .NET Framework(4.6.2 当然是 windows)的服务,代码如下所示:

        var certificate = new X509Certificate2("./ExternalCert.pfx", "supersecurepassword764689");
var httpClientHandler = new HttpClientHandler
{
ClientCertificateOptions = ClientCertificateOption.Manual,
ClientCertificates =
{
certificate
},
CookieContainer = this.cookieContainer,
};
this.httpClient = new HttpClient(httpClientHandler)
{
BaseAddress = new Uri(url)
};

而且效果很好。现在我们正在切换到 ASP.NET Core 2(基于 .NET Core)和 Docker。在我的 Windows 机器上进行开发期间,上面的代码也适用于 .NET Core。

但现在如果我在 docker 容器(当然是 linux)中执行它,它就不再工作了(SSL 错误)。 (目前证书被复制到容器镜像中,但计划将其与 docker secrets 一起存储)。

我做了一些研究,似乎 *.pfx 在 linux 上不起作用,你必须生成一个基于 pfx 的 *.pem 文件。所以我用这个命令生成了它:

openssl pkcs12 -in ExternalCertificate.pfx -out ExternalCertificate.pem -nodes

之后我替换了以下行:

var certificate = new X509Certificate2("./NewExternalCert.pem", "supersecurepassword764689");

也尝试过:

var certificate = new X509Certificate2(File.ReadAllBytes("./NewExternalCert.pem"), "supersecurepassword764689");

现在我仍然从外部服务收到客户端证书丢失的错误,但我的应用程序没有异常。

那我做错了什么?如何在 Linux 上发送证书?是否有可能以相同的方式在两个操作系统上执行此操作?

提前感谢您的任何建议!

最佳答案

我想通了。您必须设置linux环境,因为您必须在windows上安装证书。

我将证书复制为容器镜像 (Dockerfile) 的一部分:

COPY ExternalCert.pem /etc/ssl/certs/ExternalCert.pem

之后代码按预期工作

关于c# - 客户端证书 HttpClient .Net Core Docker Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47800861/

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