如何为来自 windows server 2012 R2 的出站请求启用 TLS 1.2?

Posted

技术标签:

【中文标题】如何为来自 windows server 2012 R2 的出站请求启用 TLS 1.2?【英文标题】:How to enable TLS 1.2 for outbound request from windows server 2012 R2? 【发布时间】:2018-12-03 19:10:56 【问题描述】:

我需要从 .net 应用程序(内置 4.0 版本)启用来自 windows server 2012 R2 的出站请求。

我已按照link 中的说明进行操作 但我仍然收到以下错误:

System.Net.WebException:底层连接已关闭:接收时发生意外错误。 ---> System.ComponentModel.Win32Exception: 客户端和服务器无法通信,因为它们在 System.Net.SSPIWrapper.AcquireCredentialsHandle(SSPIInterface SecModule, String package, CredentialUse intent, SecureCredential scc) 在 System.Net 上没有通用算法.Security.SecureChannel.AcquireCredentialsHandle(CredentialUse credUsage, SecureCredential&secureCredential) 在 System.Net.Security.SecureChannel.AcquireClientCredentials(Byte[]& thumbPrint) 在 System.Net.Security.SecureChannel.GenerateToken(Byte[] 输入,Int32 偏移量,Int32计数,字节 []& 输出)在 System.Net.Security.SecureChannel.NextMessage(字节 [] 传入,Int32 偏移量,Int32 计数)在 System.Net.Security.SslState.StartSendBlob(字节 [] 传入,Int32 计数,AsyncProtocolRequest asyncRequest) 在 System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResultlazyResult) 在 System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResultlazyResult) 在 System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest) .Net.TlsStream.CallProcessAuthentication(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 在 System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult 结果) 在 System.Net.TlsStream.Write(Byte[] 缓冲区, Int32 偏移量, Int32大小)在 System.Net.PooledStream.Write(Byte[] 缓冲区,Int32 偏移量,Int32 大小) 在 System.Net.ConnectStream.WriteHeaders(Boolean async) --- 内部异常堆栈跟踪结束 --- 在 System.Net .HttpWebRequest.GetResponse()

我遇到了这个错误,因为我们正在使用结帐支付网关,在我们遇到这个问题之后,他们停止接受任何低于 TLS 1.2 的请求。

这是我的注册表项示例的一部分:

请建议我如何解决此问题。提前致谢。

【问题讨论】:

错误可能在本地PC上。打开你的 IE 并提前设置看看是否启用了 TLS。 这不是我本地电脑错误。 如果请求没有启用 TLS,它可能会给出错误:客户端和服务器无法通信,因为它们没有共同的算法 您的问题中没有足够的信息。你有抛出异常的代码吗?为什么你没有在问题中提供它?现在,由于这个问题的缺陷,您收到的投机性答案会吸引反对票,并且对您或其他任何人都没有用,因为您的问题没有得到正确描述。显示您的代码。写一个有意义的问题,而不必点击另一个网站的链接。 【参考方案1】:

您应该在代码中明确选择 TLS 1.2。在应用程序的开头添加以下行:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

【讨论】:

我添加了这一行,添加后我收到此错误:System.Net.WebException:远程服务器返回错误:(400)错误请求。在 System.Net.HttpWebRequest.GetResponse() @user7336033 现在你可以成功连接API了,你的请求有问题,请验证它是否正确 我正在检查请求,并将接受您的回答作为成功回答。谢谢【参考方案2】:

TLS 是安全层,您可以在 iis 中启用它,并在服务器证书中导入证书。证书文件是一个扩展名为 .pfx 的文件,您可以通过多种方式创建它

【讨论】:

以上是关于如何为来自 windows server 2012 R2 的出站请求启用 TLS 1.2?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 SQL Server Windows 身份验证配置 Squirrel SQL

如何为站点系统配置 Windows Server 2008

Blend 2012. 如何为 Window 8 手机显示不同的分辨率?

如何为 Sql Server 列的默认绑定使用参数化函数

如何为 SQL Server 和 SQL Server Compact 编写相同的 ado.net 代码?

如何为ubuntu server 14.04 安装图形界面