【发布时间】:2017-05-24 09:18:07
【问题描述】:
如本问题所述,我可以使用他们的测试帐户和测试证书与 Swish 建立联系。
但是,当使用我自己生成的证书时,我仍然会使用 C# HttpClient 得到一般错误 Could not create SSL/TLS secure channel。
我一直在遵循以下 Swish 证书管理指南:
https://www.getswish.se/content/uploads/2015/11/Guide-Certifikatsadministration_20151210.pdf
由于我们使用的是 IIS,因此我使用以下代码创建了证书签名请求:IIS -> Server Certificates -> Create Certificate Request…。我选择位长为 2048 的Microsoft RSA Schannel Cryptographic Provider,因为文档说它应该是PKCS#10 with 2048-bit RSA key。我的理论是我在这里做错了什么。由于我们现在正在开发此应用程序并且该应用程序未在域名上运行但我将Common Name 设置为localhost。这可能是问题吗?如果是这样,我应该在我们的环境中使用什么价值?正如我之前提到的,测试证书可以正常工作。
在此之后,我粘贴了在服务https://getswishcert.bankgirot.se/ 创建的文件中的值并返回了一个 PKCS#7 文件(.p7b,也尝试使用 .pem)。
然后我没有去IIS -> Server Certificates -> Complete Certificate Request… 导入文件。
当导入 Certification Path 时,据我所知,其他一切看起来都不错。
我还尝试通过MMC -> Select certificate -> right click -> All Tasks -> Export 将证书导出到.pfx。选择使用私钥和密码保护导出它。然后在Certificates - Current User 下导入。然后我可以在 Chrome 中选择证书,但我收到错误 `ERR_SSL_PROTOCOL_ERROR。测试证书也适用于 Chrome。
【问题讨论】:
-
什么 .NET 版本?在 4.5+ 中添加了 TLS1.2。银行很可能拒绝任何更少的东西。这不是一个问题,除非您的目标是不受支持的 .NET 版本。最早支持的 .NET 版本是 4.5.2。如果您有 4.0,则必须升级
-
@PanagiotisKanavos .Net 4.5.2 并使用
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;强制 TLS1.2。该代码适用于他们的测试证书,但不适用于我的证书。 -
PS 这也不是最近的发展。银行、航空公司、支付提供商在两年前通知所有人他们将切换到 TLS1.2,截止日期从 1 年前开始。
-
为什么要这样?想象一下,我创建了自己的自签名证书,说我是“月球背面的 Rotschild 银行”。由我签字。如果银行进行证书验证,您的证书将失败
-
@PanagiotisKanavos 是的,我已经读过了。实际上很多人仍然支持 1.1,但这是另一个问题。