gpt4 book ai didi

c# - 无法创建 SSL/TLS 安全通道适用于 winforms 但不适用于 asp.net

转载 作者:可可西里 更新时间:2023-11-01 08:13:00 25 4
gpt4 key购买 nike

我有一个 Web 服务,我通过“添加服务引用”注册了它,它需要 HTTPS 和证书。下面是我用于实例化服务的代码:

        service = new MyReferencedWebService();

X509Certificate2 cert = new X509Certificate2();

var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Mycert.cer");
var bytes = new byte[stream.Length];

stream.Read(bytes, 0, bytes.Length);

cert.Import(bytes, MYPASSWORD, X509KeyStorageFlags.DefaultKeySet);

service.ClientCredentials.ClientCertificate.Certificate = cert;

我的配置是这样的:

<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="RecordGeneratorWebServiceSoapHttp">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://mywebserviceurl"
binding="basicHttpBinding" bindingConfiguration="RecordGeneratorWebServiceSoapHttp"
contract="MyService.RecordGeneratorWebServiceInterface"
name="RecordGeneratorWebServicePort" />
</client>
</system.serviceModel>

如果我创建一个简单的 winforms .exe 并使用上面的代码,我会从我的网络服务中得到响应。但是,如果我将相同的代码放在 ASP.NET 中,我会得到以下结果:

请求已中止:无法创建 SSL/TLS 安全通道。

我如何在 ASP.NET 中完成这项工作?

编辑:我应该补充一下。我使用的客户端证书与智能卡绑定(bind),需要输入 PIN 才能使用。不确定这是否有任何区别。

当客户端登录到应用程序时,它会提示他们输入证书 PIN。在这种情况下,他们将 CAC 卡插入 CAC 读卡器中。那么也许我可以以某种方式使用 Request.ClientCertificate?

最佳答案

你在这里有什么计划?换句话说:

谁将输入 PIN?谁将插入智能卡?

如果没有智能卡和个人识别码,您无法在 ASP.NET 网络服务器和网络服务之间建立安全通道,因为客户端(即 ASP.NET 网络服务器)必须访问智能卡上的私钥(并且需要别针来做到这一点)。我担心你要让它工作的唯一方法是从智能卡中获取整个证书(包括私钥)(如果不是设计上不可能的话,这应该是非常困难的)。

您最好的做法是:

A) 请求可用作 ASP.NET Web 服务器和目标 Web 服务之间 channel 的客户端证书的“服务器证书”(非智能卡)。

B) 重新设计您的解决方案,以便客户(拥有智能卡和 PIN 码的人)直接使用他们的智能卡和 PIN 码访问安全网络服务。

关于c# - 无法创建 SSL/TLS 安全通道适用于 winforms 但不适用于 asp.net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21785734/

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