2010-06-25 66 views
1

我們的應用程序運行在兩個框架中。一個使用https一個不。我試圖配置tomcat連接器工作,但是當我在一個框架中工作時,它不能在另一個框架中工作。與SSL配置和Tomcat混淆

我被告知我們不需要'完全處理'SSL,因爲這是由我們的負載均衡器處理的。不知道這些是什麼意思。

例如: 在一個框架中,我們將獲得權限被拒絕的錯誤,另一個框架將工作。如果我們改變了相反的情況,但不是許可錯誤,我們會得到無效的證書錯誤。

連接器上的tomcat文檔沒有很好地描述這些選項。任何想法我們做錯了什麼?

<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000"/> 

<Connector port="443" protocol="HTTP/1.1" SSLEnabled="false" maxThreads="150" scheme="https" secure="false" clientAuth="false" sslProtocol="TLS"/> 

上述連接器與http框架一起工作,但在IE中給了我「混合內容警告」,因爲有些請求是http和一些https。

任何幫助將不勝感激。

回答

0

如果您有一個連接器偵聽端口443,它應該啓用SSL,因爲這是HTTPS端口,瀏覽器會在連接—時發送SSL ClientHello消息,服務器不會理解此內容,除非它是啓用S​​SL。

可能是因爲您的負載平衡器正在終止SSL連接,並通過普通HTTP將請求轉發給Tomcat。在這種情況下,您不需要端口443上的連接器。

但是,聽起來像您的某個應用程序可能正在使用客戶端證書來執行身份驗證。查看web.xml文件中的login-config元素。什麼驗證方法正在使用?

如果您需要客戶端證書,但SSL在負載平衡器處終止,則身份驗證無法執行,因爲客戶端證書從未到達Tomcat。

+1

看起來這裏並不需要客戶端證書,但實際上你可以通過使用mod_headers和類似於mod_hexy的東西將客戶端證書傳遞給Tomcat (也可以沒有mod_headers和mod_jk): SSLOptions + StdEnvVars + ExportCertData RequestHeader set SSL_CLIENT_CERT%{SSL_CLIENT_CERT} e – Bruno 2010-06-25 17:16:19

0

如果你在一個負載均衡器後面,比如帶有mod_proxy的Apache Httpd(在反向模式下),SSL連接將從瀏覽器到負載均衡器(如「erickson」所述)。您可能確實在您的web.xml文件中檢查了login-config(以檢查您是否使用CLIENT-CERT)。

可能遇到的另一個問題是transport-guarantee元素在web.xml:

<security-constraint> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

似乎有一種方法與當你確定你是一個安全的負載定製的閥門,迫使這個-balancer。這裏是an article on the subject (translated from French)

混合內容最可能的原因是加載未託管在SSL上的圖像。您可能會發現某個公司徽標在某個位置模板中使用http://進行了硬編碼,或者某些Location標頭可能會返回http:// URL。 後者可以使用這樣apache httpd的配置是固定的(假設這是你的負載均衡器),在這裏你需要與過程的正確地址替換它:甚至從大

Header edit Location ^http://www.example.com/test/ https://www.example.com/test/ 

許多網站(公司)混合的內容。這實際上是一件壞事,因爲:

  • 用戶無法真正瞭解頁面的哪些部分是安全的,哪些不是,沒有查看所有請求以及頁面的來源。
  • 一些cookie和HTTPS請求中的信息泄露給普通HTTP請求。如果有人通過普通的HTTP捕獲該cookie,他們可能通過HTTPS作爲冒名頂替者來使用它。 (更具體地說,當使用沒有安全標誌的cookie時)。