当前位置: 首页 > 知识库问答 >
问题:

ASP NET核心Web API禁用TLS 1.0和TLS 1.1支持

帅锦
2023-03-14

我正在尝试禁用在Docker(Debian OS)和.NET 5上运行的API的TLS 1.0和TLS 1.1支持。我发现这段代码与此特定问题相关:

     public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.ConfigureKestrel(opt =>
                    {
                        opt.ConfigureHttpsDefaults(s =>
                        {
                            s.SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls13;
                        });
                    }).UseStartup<Startup>();
                }
            );

下面是Powershell脚本

 $HostName = 'YOUR_URL'
 $Port = '443'
 
 $RetValue = New-Object psobject -Property @{
            Host = $HostName
            Port = $Port
            SSLv2 = $false
            SSLv3 = $false
            TLSv1_0 = $false
            TLSv1_1 = $false
            TLSv1_2 = $false
            TLSv1_3 = $false
            KeyExhange = $null
            HashAlgorithm = $null
        }
        "ssl2", "ssl3", "tls", "tls11", "tls12","tls13" | %{
            $TcpClient = New-Object Net.Sockets.TcpClient
            $TcpClient.Connect($RetValue.Host, $RetValue.Port)
            $SslStream = New-Object Net.Security.SslStream $TcpClient.GetStream(),
                $true,
                ([System.Net.Security.RemoteCertificateValidationCallback]{ $true })
            $SslStream.ReadTimeout = 15000
            $SslStream.WriteTimeout = 15000
            try {
                $SslStream.AuthenticateAsClient($RetValue.Host,$null,$_,$false)
                $RetValue.KeyExhange = $SslStream.KeyExchangeAlgorithm
                $RetValue.HashAlgorithm = $SslStream.HashAlgorithm
                $status = $true
            } catch {
                $status = $false
            }
            switch ($_) {
                "ssl2" {$RetValue.SSLv2 = $status}
                "ssl3" {$RetValue.SSLv3 = $status}
                "tls" {$RetValue.TLSv1_0 = $status}
                "tls11" {$RetValue.TLSv1_1 = $status}
                "tls12" {$RetValue.TLSv1_2 = $status}
                "tls13" {$RetValue.TLSv1_3 = $status}
            }
            # dispose objects to prevent memory leaks
            $TcpClient.Dispose()
            $SslStream.Dispose()
        }
        $RetValue

这是红隼配置的错误吗?我可以做其他事情来禁用TLS1.0和TLS1.1加密吗?

编辑这是我试图解决的原始问题:

远程服务接受使用TLS 1.0加密的连接。TLS 1.0有许多加密设计缺陷。较新版本的TLS是针对这些缺陷而设计的,应该尽可能使用。PCI DSS v3.1要求在2018年6月前完全禁用TLS 1.0,销售点终端及其终结点除外。截至2020年3月31日,不支持TLS 1.2及更高版本的终端将无法在主流web浏览器和主流供应商上正常运行。

共有1个答案

韦高阳
2023-03-14

由于. net 5似乎删除了禁用TLS版本的选项,而是必须在操作系统中禁用它。

Kestrel现在使用系统默认的TLS协议版本,而不是像以前那样限制与TLS 1.1和TLS 1.2协议的连接。

https://learn.microsoft.com/en-us/dotnet/core/compatibility/aspnet-core/5.0/kestrel-default-supported-tls-protocol-versions-changed

那么问题可能会变成:如何使用Debian在docker映像中禁用它,似乎可以通过dockerfile中的docker RUN OpenSSL命令来完成,以在OpenSSL或OpenSSL的配置文件中禁用它。

如何在OpenSSL中禁用TLS v1.0和TLS v1.1

在/etc/ssl/openssl中。oid_section后添加cnf:

openssl_conf = default_conf

[default_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=2

https://blog.surgut.co.uk/2019/08/how-to-disable-tls-10-and-tls-11-on.html

 类似资料:
  • aspnet-core-webapi Esse é um projeto para futuras consultas de técnicas empregadas com ASP.NET Core 2.2 aplicando API-Guidelines da Microsoft. Técnicas RESTfull Autenticação JWT Swagger Versionamento

  • 我的测试程序从以下URL运行HTTP服务器:HTTP://www.herongyang.com/jdk/https-httpsechoer-better-https-server.html 请帮助如何使java只接受TLS1.2连接。

  • 我正在为PoC点构建我的dotnet core webapi服务,我关心的是为其他ARCH/Devs提供适当的指导。 “相同”方法签名的变化很少 公共动态获取(字符串名称=_defaultName) 公共IActionResult Get(字符串名称=_DefaultName) 获取公共异步任务(字符串名称=_defaultName) 撇开我为什么使用动态类型而不是自定义类型的讨论不谈,我试图理解

  • 我正在使用React创建一个PWA,并使用Auth0作为身份提供者,使用JWT承载令牌作为身份验证。我将角色注入到我的JWT令牌中,这样客户端就可以限制用户可以使用的选项,我的工作非常好。 我现在想限制服务器端,这样就不能调用终结点,除非用户具有访问该终结点所需的必要角色。 令人烦恼的是,Auth0似乎不支持添加或声称aspnet核心似乎可以处理OOTB;它要求域在声明定义中的角色之前。ie,作为

  • 我已经用Python 2.7开发了一个应用程序。但它只支持协议_TLSv1。我必须以某种方式使其与协议_TLSv1_1和协议_TLSv1_2兼容。我找不到任何图书馆或窍门。有必要升级Python版本吗? 请指导我或帮助我找到更好的解决方案。没有什么不碍事的解决方案吗?

  • 我已经创建了自定义中间件类来验证JWT令牌。我在