Kestrel和OpenSSL密码套件
如何从Linux docker容器中更改OpenSSL / Kestrel可用的密码套件?
首先,让我们从一些环境细节开始:
- 我们使用通过powershell连接的Linux docker容器(Docker版本17.06.0-ce,build 02c1d87)
- 它拥有一个用C#编写的ASP.Net Core(netcore 1.1)web应用程序。
- 主要是针对.NetStandard 1.4 / 1.6写的,但是计划到2.0。
- 我们使用Kestrel作为Docker容器上的Web服务器
- 据我所知,Kestrel正在使用openSSL(1.0.1)。
我的Program.cs看起来像这样,它build立了茶隼:
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级。 我想sorting的是这个问题,我相信只要支持TLS1.1和1.2就可以解决这个问题。
但是,举个例子,正如你上面所看到的,我没有提到TLS 1.0,但是它在报告中可以find,这有点让我难住。
是实际使用的代码,还是从其他地方获得可用的密码? 因为它看起来像SslProtocols属性的值没有区别。
当使用Apache时,你可以通过configuration文件(httpd.conf)configuration可用的密码套件,所以我认为kestrel可能有一个文件来做同样的事情,但我没有设法find一个。 普遍的共识似乎是用代码来处理。 据我所知,我已经做了?
然后,我考虑使用Apache作为面向Internet的Web服务器来处理密码pipe理,然后将请求代理到kestrel上,但这会违反此项目的合同,我们指定所有数据在每个阶段都会保持encryption过境。 在重新encryption它以便转运到红隼之前,解密Apache中的数据的过程是不可行的。
然后我想,也许OpenSSL有一个类似Apache的configuration文件,我可以改变这个configuration来实现我所需要的。 我在我们的文件系统中find了这两个文件:
/usr/lib/ssl/openssl.cnf /etc/ssl/openssl.cnf
但是他们都没有任何我希望与Apacheconfiguration文件比较时会看到的密码套件列表。 或者也许是这样,我只是误解了文件格式?
我也遇到了这种方法,可以用来configuration可用的密码套件SSL_CTX_set_cipher_list,但我认为这只在C ++中可用,并没有类似的C#function/包装,我发现。 我想在build立网站之前,可以编写一个C ++程序来设置密码套件。 但是,这听起来很不方便,我宁愿让网站自己处理它。
长话短说,我正在迅速用完想法。 所以你有任何input是非常感激。 感谢您的任何帮助,您可以提供!
密码套件select和TLS版本configuration尚未实现。 在GH上检查这个问题: https : //github.com/aspnet/KestrelHttpServer/issues/1865
由于红隼已经准备好了,将来可能会有这样的configuration。 最重要的是,他们想要一个简化的,也就是说所有操作系统都是相同的configurationAPI。
- 在Docker容器中运行Opencover和ReportGenerator
- 如何减less.NET Core docker容器的内存使用量?
- 在dotnet发布后,在docker映像中找不到Application Insights依赖关系
- dotnet aspnetcore docker生成失败,错误代码为145
- 将Docker容器从Visual Studio 2017 RTM部署到生产服务器
- 已经导入了具有等同标识的多个组件:“<内存组装>”和“<内存组装>”
- 如何从docker-compose.ci.build.yml文件构build&推送容器
- 在Linux上使用Docker进行Asp.Net 5.0开发
- 无法find依赖关系的“类库项目”