2017-08-22 26 views
1

如何從Linux Docker容器中更改可用於OpenSSL/Kestrel的可用密碼套件?Kestrel和OpenSSL密碼套件

首先,讓我們與一些環境細節做起:

  • 我們使用一個Linux泊塢窗的容器,我們通過PowerShell的
  • 連接(多克爾版本17.06.0策,建立02c1d87)它承載的ASP用C#編寫的.Net Core(netcore 1.1)網絡應用程序。
  • 主要針對.NetStandard 1.4/1.6編寫,但已計劃進入2.0。
  • 我們在碼頭集裝箱上使用Kestrel作爲我們的網絡服務器
  • Kestrel在引擎蓋下使用openSSL(1.0.1)據我所知。

我的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或這些的任何子集),它似乎沒有影響可用於連接的密碼套件。由於舊協議上的RC4密碼的可用性,我將通過sslLabs報告來查找我的URL,該URL由B級限制。我想排序的是這個問題,我相信僅僅支持TLS1.1和1.2就能解決這個問題。

但是,例如,正如你在上面看到的,我沒有提到TLS 1.0,但它在報告中可用,這對我來說有點難倒。

它實際使用的代碼,還是從其他地方獲得可用的密碼?因爲它看起來像SslProtocols屬性的值沒有區別。

使用Apache時,您可以通過配置文件(httpd.conf)配置可用的密碼套件,所以我認爲kestrel可能有一個文件來做同樣的事情,但我沒有設法找到一個。普遍的共識似乎是在代碼中處理。據我所知,我已經完成了?

然後,我考慮使用Apache作爲面向Internet的Web服務器來處理密碼管理,然後將請求代理到kestrel上,但這會違反此項目的合同,我們指定所有數據都將保持加密在過境的每個階段。在重新加密它以便轉運到紅隼之前,解密Apache中的數據是不可行的。

然後我想,也許OpenSSL有一個類似Apache的配置文件,並且我可以更改該配置以實現我所需的配置。我發現這2個文件在我們的文件系統:

/usr/lib/ssl/openssl.cnf 
/etc/ssl/openssl.cnf 

但他們都不具備,我希望看到與Apache的配置文件進行比較時的密碼套件的任何名單。或者也許它確實存在,而我剛剛誤解了文件格式?

我也遇到過這種方法,可以用來配置可用的密碼套件'SSL_CTX_set_cipher_list',但我認爲這隻適用於C++,並沒有類似的功能/包裝我找到了C#。我想在設置網站之前可以編寫一個C++程序來設置密碼套件,當推入docker時?但是,這聽起來很不方便,我寧願讓網站自己處理它。長期以來,我很快就沒有想法了。所以你有任何輸入是不勝感激。感謝您的任何幫助,您可以提供!

回答