C# 如何在ASP.NETCore2.0中实现TLS1.2

C# 如何在ASP.NETCore2.0中实现TLS1.2,c#,asp.net-core-2.0,tls1.2,kestrel-http-server,C#,Asp.net Core 2.0,Tls1.2,Kestrel Http Server,平台详细信息:C#,.Net Core 2.0,WS 2016,反向代理中的IIS和Kestrel 我的web应用程序必须使用HTTPS和TLS 1.2。SSL已经可以正常运行了,但这还不够。我在网上找到了TLS 1.2默认情况下在web服务器上所需的注册表编辑的详细信息,并进行了这些更改。在这些注册表编辑之后,我的原始代码仍然有效。为了强制使用TLS1.2,我在buildwebhost方法中的UseKestrel()中添加了以下内容 options => { options.Li

平台详细信息:C#,.Net Core 2.0,WS 2016,反向代理中的IIS和Kestrel

我的web应用程序必须使用HTTPS和TLS 1.2。SSL已经可以正常运行了,但这还不够。我在网上找到了TLS 1.2默认情况下在web服务器上所需的注册表编辑的详细信息,并进行了这些更改。在这些注册表编辑之后,我的原始代码仍然有效。为了强制使用TLS1.2,我在buildwebhost方法中的UseKestrel()中添加了以下内容

options =>
{
    options.Listen(System.Net.IPAddress.Loopback, 443, listenOptions =>
    {
        listenOptions.UseHttps(new HttpsConnectionAdapterOptions { SslProtocols = SslProtocols.Tls12 });
    }
}))
现在该网站正在抛出一个502.5。IIS使用原始证书配置,站点绑定到端口443。我已经被告知SSL和TLS之间的证书本身是相同的,所以我不需要再获得另一个证书。当我尝试用本地主机调试代码时,我的VS返回一个错误

System.ArgumentException:'服务器证书参数是必需的。'


我已经找到了一个“X509Certificate2”对象的详细信息,以及作者使用load方法从服务器上的某个位置流式传输该证书的一些不同实现,但我不知道这里是否需要这样做

答案在问题的评论中。服务器提供了一个默认情况下不包含TLS 1.2的映像,因此我们所做的注册表编辑实际上是必需的,但除此之外,您不需要做任何特殊的操作。默认情况下使用操作系统选项,这意味着首先使用可用的最强算法。在WS 2016上,即TLS 1.2。仅当您希望禁用例如TLS1.1时,才需要指定一些内容。现成的ASP.NET Core 2.1模板在其默认配置中配置TLS、HST等。查看2018年8月的文章。2.0已不受支持。2.x系列中的长期版本为2.1如果要禁用TLS的较低版本,必须在操作系统级别禁用。正如@PanagiotisKanavos所说,服务器将始终使用最高兼容版本,但如果一个真正的旧客户端请求TLS 1.0,则将通过该版本提供服务,除非操作系统禁用它。在这种情况下,客户端将完全拒绝访问。请选择您的答案作为正确答案,并提供有关您问题的更多详细信息。正如评论所指出的,WS2016操作系统在默认情况下应配置为使用TLS 1.2。组织资源调配过程的一部分从服务器上删除了TLS1.2,因此编辑注册表以重新启用TLS1.2是解决方案。不需要进一步的改变。