gpt4 book ai didi

c# - ASP NET Core Web API 禁用 TLS 1.0 和 TLS 1.1 支持

转载 作者:行者123 更新时间:2023-12-04 22:42:02 27 4
gpt4 key购买 nike

我正在尝试禁用对在 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>();
}
);
但是,在发布更改时,我正在运行一个脚本来确定服务器是否仍然支持 TLS1.0 和 TLS1.1,令人惊讶的是,尽管我明确地将 HTTPS 默认设置为 TLS1.2 和 TLS1.3,但我得到了以下结果:
enter image description here
这是 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
这是 Kestrel 配置上的错误吗?我可以做其他事情来禁用 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 浏览器和主要供应商一起正常运行。

最佳答案

自 .net 5 起,禁用 TLS 版本的选项似乎已被删除,而是必须在操作系统中禁用。

Kestrel now uses the system default TLS protocol versions rather thanrestricting connections to the TLS 1.1 and TLS 1.2 protocols like itdid previously.


https://docs.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
在 oid_section 之后的/etc/ssl/openssl.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

关于c# - ASP NET Core Web API 禁用 TLS 1.0 和 TLS 1.1 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68473321/

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