【问题标题】:Implementing Swish payment C# - Only on Azure - Sending client certificate - The request was aborted: Could not create SSL/TLS secure channel实施 Swish 支付 C# - 仅在 Azure 上 - 发送客户端证书 - 请求被中止:无法创建 SSL/TLS 安全通道
【发布时间】:2017-10-29 19:14:23
【问题描述】:

在写这个问题之前,我已经经历了很多问题和答案,但我似乎无法找到解决方案。我正在尝试将应用程序托管为需要调用 Swish API 的 Azure 应用服务。

请参阅此线程,了解我的实现如何在本地运行,效果很好:

C# HttpClient with X509Certificate2 - WebException: The request was aborted: Could not create SSL/TLS secure channel

来自 Azure 的系统诊断日志:

https://pastebin.com/EBFb3zrA

我已经尝试过 Microsoft 论坛和 SO 的解决方案,但似乎没有一个可以解决问题:

https://social.msdn.microsoft.com/Forums/azure/en-US/ca6372be-3169-4fb5-870f-bfbea605faf6/azure-webapp-webjob-exception-could-not-create-ssltls-secure-channel?forum=windowsazurewebsitespreview

//Tested both, none of them work
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
//ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11

由于很多问题都是基于访问外部服务而不是发送客户端证书,因此复杂性也有所增加。

我所做的是在 Azure 上的 SSL certificates 选项卡中导入测试证书。因为.p12 和.pfx 都是PKCS #12 文件,所以我刚刚重命名了.p12 文件。该应用程序以B1 Basic App Service Plan 的身份运行,因此应该存在大部分功能。

https://stackoverflow.com/a/6821061/3850405

我也试过这个指南将证书添加到 Azure 中的证书存储区 -> 应用程序设置 -> 应用程序设置:

https://azure.microsoft.com/en-us/blog/using-certificates-in-azure-websites-applications/

当这不起作用时,我尝试在我的应用程序中将 WEBSITE_LOAD_CERTIFICATES 添加到 appSettings,但结果是 HTTP 503。

Swish 证书和英文指南:

https://www.getswish.se/content/uploads/2015/06/Guide-Testverktyg_20151210.zip

【问题讨论】:

  • 据我所知,您上传到 Web 应用程序的证书只会安装到个人证书存储区。当我按照您的 swish 证书指南进行操作时,我发现它会存储在 Trusted Root Certification Authorities 中,我认为这可能是原因。
  • @Bruce-MSFT 是的,我认为这也是问题所在。现在以virtual machine 运行它,它工作正常。如果可以以App Service 的形式进行,那就太好了。
  • 你设法让它工作了吗?我在这里寻找同样的东西。
  • @JeppePepp 不,它不会起作用。我直接询问微软是否信任他们的证书,但请求被拒绝。我们通过将其托管为虚拟机并从那里将其证书添加到受信任的根证书颁发机构来解决它。 feedback.azure.com/forums/169385-web-apps/suggestions/…
  • 好的,谢谢您的回答。我知道这个问题已经很老了,所以我在祈祷你有一些好消息要分享。我现在会坚持使用 klarna :)

标签: c# azure ssl https


【解决方案1】:

我们能够在 Azure Web 应用程序中完成这项工作。诀窍是 appSetting WEBSITE_LOAD_CERTIFICATES 并在 Azure 门户中上传所有 Swish 证书。也就是说,来自 Swish 的 .pfx 文件包含三个证书,其中两个是根证书。因此,我们导出了根证书并在 TLS/SSL 设置 -> 公钥证书 (.cer) 下上传了 .cer 文件,然后它就开始工作了。您还需要将它们上传到所有部署槽,因为证书不会自动复制到槽中。

【讨论】:

  • 您是否需要在代码中添加其他内容才能使用根证书?当我创建 HttpClient 时,我添加了使用 certStore.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false) 找到的客户端证书,但这似乎只添加了客户端证书本身,而没有添加根证书。你也将它们添加到HttpClientHandler.ClientCertificates 吗?
  • 是的,没错,我们将它们添加到HttpClientHandler.ClientCertificates。
  • 这里的答案是绝对正确的。但是,如果有人想要更全面的指南如何让这个工作,我已经在我的博客上写了一篇:johan.driessen.se/posts/…
【解决方案2】:

根据您的情况,我还通过将证书文件添加到资源文件中进行检查,并通过以下代码 sn-p 构造 X509Certificate2 实例:

var certBytes=(byte[])ResourceManager.GetObject("Swish_Certificate");
var certificate = new X509Certificate2(certBytes, "swish");

根据我的测试,我假设您无法在 Azure Web App 上实现 Swish 支付。此外,您可以添加对 azure web 应用 here 的反馈。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-20
    • 2018-07-25
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 2012-06-05
    相关资源
    最近更新 更多