如何在Linux docker容器中更改OpenSSL / Kestrel可用的可用密码套件?
首先,让我们从一些环境细节开始:
我的Program.cs看起来像这样,它设置了红隼:
builder.UseKestrel(o => o.UseHttps(new HttpsConnectionFilterOptions
{
SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11,
CheckCertificateRevocation = true,
ClientCertificateMode = ClientCertificateMode.AllowCertificate
ServerCertificate = new X509Certificate2(certificate.Pfx, certificate.Password)
}))
.UseUrls(bindTo);
关键是:
SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11,
无论我在此处设置什么值(Tls12,Tls11,Tls或其中任何一个子集),它似乎都不会对可用于连接的密码套件产生影响。我将通过sslLabs报告获取我的URL,由于旧协议上的RC4密码可用,因此上限为B级。哪个是我想要排序的问题,我认为只支持TLS1.1和1.2就可以解决这个问题。
但是,例如,正如您在上面所看到的,我没有提到TLS 1.0,但它在报告中可用,这有点让我难过。
它实际上是在使用代码,还是从其他地方获取可用的密码?因为它看起来肯定与SslProtocols属性的值没有区别。
使用Apache时,你可以通过配置文件(httpd.conf)配置可用的密码套件,所以我认为红隼可能有一个文件来做同样的事情,但我没有设法找到一个。普遍的共识似乎是它在代码中处理。据我所知,我已经做过了?
然后我考虑使用Apache作为面向Internet的Web服务器来处理密码管理,然后将请求代理到kestrel,但这违反了该项目的合同,我们指定所有数据在此期间保持加密状态过境的每个阶段。在重新加密数据以便传输到kestrel之前解密Apache中的数据的过程是不可行的。
然后我认为OpenSSL可能有一个与Apache类似的配置文件,我可以改变配置来实现我所需要的。我在文件系统中找到了这两个文件:
/usr/lib/ssl/openssl.cnf
/etc/ssl/openssl.cnf
但他们都没有任何密码套件列表,我希望在与Apache配置文件比较时看到这些密码套件。或许它确实如此,我只是误解了文件格式?
我也遇到过这种可用于配置可用密码套件'SSL_CTX_set_cipher_list'的方法,但我认为这仅适用于C ++,并且我找不到类似的C#功能/包装器。我想在设置网站之前,在推入docker时可以编写一个C ++程序来设置密码套件吗?但这听起来真的很讨厌,我宁愿让网站单独处理它。
长话短说,我很快就没有想法了。所以您的任何输入都非常感谢。感谢您提供的任何帮助!
答案 0 :(得分:2)
密码套件选择和TLS版本配置尚未实现。请在GH上查看此问题:https://github.com/aspnet/KestrelHttpServer/issues/1865
由于红隼准备就绪,因此将来可能会对此进行配置。最重要的是,他们想要一个简化的,也就是所有操作系统相同的配置API。
答案 1 :(得分:0)
似乎在ASP.NET Core 3.0中已解决,您可以在“ CipherSuitesPolicy”下看到它 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.0