【问题标题】:Client certificate HttpClient .Net Core Docker Linux客户端证书 HttpClient .Net Core Docker Linux
【发布时间】:2018-05-27 19:19:59
【问题描述】:

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

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

        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 机密一起存储)。

我做了一些研究,似乎 *.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 上发送证书? 是否有可能在两个操作系统上以相同的方式执行此操作?

提前感谢您的任何建议!

【问题讨论】:

  • 听起来那部分有很多问题,github.com/dotnet/corefx/…✓ 您可能会进一步挖掘以查看您遇到的问题以及是否已经有解决方案。如果没有与您匹配的,请打开一个新的。
  • 是的,阅读了很多并尝试了一些“解决方案”。我花了很多时间尝试不同的东西,现在我不确定我是否错过了一些太明显的东西。
  • 一个快速的方法是为这部分挖掘微软单元测试用例,看看它们是否适用于 Linux。然后你就会知道微软是否已经实现了它。
  • 谢谢,我会头脑清醒的尝试一下

标签: c# linux docker asp.net-core client-certificates


【解决方案1】:

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

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

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

之后代码按预期工作

【讨论】:

  • 您是否能够在修复后使用客户端证书向您的服务(我想是在 docker 上运行)提出请求?似乎已经存在未解决的问题(github.com/dotnet/corefx/issues/30989)。我现在面临着与该问题描述的相同的事情。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 2015-04-17
  • 2011-09-28
相关资源
最近更新 更多