前不久我发表了一篇关于TLS协议配置被我钻了空子,经过第三方合作伙伴验证,针对此TLS协议存在不安全套件,急催速速解决,那么我们本篇开始继续整活!第三方合作伙伴对平台安全严苛要求,我们已连续发版十几次进行处理,在此过程中使得我对安全有了进一步认识,具体认识则是在技术解决方案和密码学盲点两方面。下面我们来了解两个方面,可能没有完全深入,至少对作为开发者的我们而言,应已基本足够
.NET Core Cipher(套件)配置
如果没有项目上的苛刻要求,我断然也就无法在此方面展开研究和实践。本文具以.NET 5为例,只不过针对.NET Core 3或3.1通过工具扫描出的协议套件结果略有所差异,但不影响我们对安全套件的配置,我们使用OpenSSL生成自签名证书,后续我会发表文章讲解OpenSSL自签名证书等等
复制代码
webBuilder.ConfigureKestrel(serverOptions =>
{
serverOptions.Listen(IPAddress.Any, 8000, listenOptions =>
{
listenOptions.UseHttps(“ssl.pfx”, “123456”, adapterOptions =>
{
adapterOptions.SslProtocols = SslProtocols.Tls12;
});
});
});
复制代码
HTTPS结合TLS 协议1.0或1.1不安全,所以TLS协议需使用1.2+,这里我们如上述代码使用版本1.2,接下来我们将其部署在Linux上,然后安装nmap,通过nmap工具扫描(至于nmap是什么,可自行了解)
通过nmap扫描指定端口号并枚举其支持TLS 套件需要注意一点,我们可能搜罗出来大多数文章的命令结果一扫,压根没有结果,其实nmap只对指定端口扫描才有效(比如443等等),比如使用如下命令无效果
nmap --script ssl-enum-ciphers localhost -p 8000
若是其他端口,可使用如下命令进行扫描
nmap --script +ssl-enum-ciphers localhost -p 8000
最终我们扫描出来的结果如下:
AES-CBC模式在中SSL或者TLS中存在一些已知的安全漏洞,如BEAST攻击、Lucky 13攻击等,虽然TLS1.1、TLS1.2未受到BEAST攻击的影响、Lucky 13(影响涉及到TLS1.1/1.2)攻击也在Openssl等知名加密算法库得到了修复,但这些漏洞均暴漏出CBC模式在SSL/TLS协议实现时容易引入安全漏洞,HTTP/2中也明确将CBC模式加密套件列为黑名单
上述是在.NET 5 TLS 1.2默认行为,但第三方规定禁止使用AES-CBC即使扫描出来的套件强度为A,并给定了其支持的安全套件
在上述配置通过路径读取文件和使用密码启用HTTPS重载方法中,如下
public static ListenOptions UseHttps(this ListenOptions listenOptions, string fileName, string password, Action configureOptions);
最后可针对连接做配置,在该类中有如下属性
public Action<ConnectionContext, SslServerAuthenticationOptions> OnAuthenticate { get; set; }
该输入第二个类参数里面,有针对套件的配置,如下(我也是结合github找了老半天才翻到)
所以最终我们配置支持的安全套件如下(诸多套件,闻所未闻,不打紧,下面会归纳总结):
复制代码
webBuilder.ConfigureKestrel(serverOptions =>
{
serverOptions.Listen(IPAddress.Any, 8000, listenOptions =>
{
listenOptions.UseHttps(“ssl.pfx”, “123456”, adapterOptions =>
{
adapterOptions.SslProtocols = SslProtocols.Tls12;
adapterOptions.OnAuthenticate = (connectionContext, authenticationOptions) =>
{
var ciphers = new List<TlsCipherSuite>()
{
TlsCipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,
TlsCipherSuite.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,
TlsCipherSuite.TLS_DHE_DSS_WITH_AES_128_GCM_SHA256,
TlsCipherSuite.TLS_DHE_DSS_WITH_AES_256_GCM_SHA384,
TlsCipherSuite.TLS_PSK_WITH_AES_128_GCM_SHA256,
TlsCipherSuite.TLS_PSK_WITH_AES_256_GCM_SHA384,
TlsCipherSuite.TLS_DHE_PSK_WITH_AES_128_GCM_SHA256,
TlsCipherSuite.TLS_DHE_PSK_WITH_AES_256_GCM_SHA384,
TlsCipherSuite.TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256,
TlsCipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
TlsCipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
TlsCipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TlsCipherSuite.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TlsCipherSuite.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
TlsCipherSuite.TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256,
TlsCipherSuite.TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256,
TlsCipherSuite.TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384,
TlsCipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CCM_SHA256,
TlsCipherSuite.TLS_DHE_RSA_WITH_AES_128_CCM,
TlsCipherSuite.TLS_DHE_RSA_WITH_AES_256_CCM,
TlsCipherSuite.TLS_DHE_RSA_WITH_AES_128_CCM_8,
TlsCipherSuite.TLS_DHE_RSA_WITH_AES_256_CCM_8,
TlsCipherSuite.TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
TlsCipherSuite.TLS_PSK_WITH_AES_128_CCM,
TlsCipherSuite.TLS_PSK_WITH_AES_256_CCM,
TlsCipherSuite.TLS_DHE_PSK_WITH_AES_128_CCM,
TlsCipherSuite.TLS_DHE_PSK_WITH_AES_256_CCM,
TlsCipherSuite.TLS_PSK_WITH_AES_128_CCM_8,
TlsCipherSuite.TLS_PSK_WITH_AES_256_CCM_8,
TlsCipherSuite.TLS_PSK_DHE_WITH_AES_128_CCM_8,
TlsCipherSuite.TLS_PSK_DHE_WITH_AES_256_CCM_8,
TlsCipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CCM,
TlsCipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CCM,
TlsCipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8,
TlsCipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8,
TlsCipherSuite.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
};
authenticationOptions.EnabledSslProtocols = SslProtocols.Tls12;
authenticationOptions.CipherSuitesPolicy = new CipherSuitesPolicy(ciphers);
};
});
});
});
亚马逊测评 www.yisuping.cn