2014-12-29 45 views
0

我有一個F5虛擬服務器配置客戶端https加密,在Web服務器前。F5 iRule來管理HTTP代理連接請求

我想這個VS也管理HTTP CONNECT請求,以便客戶端可以請求它作爲Web服務器,或作爲代理。也就是說,VS應該解密所有的TCP連接,但是如果第一個TCP數據包以「連接」開始,它應該先響應HTTP 200,然後等待下一個數據包(必須是「客戶端你好」 )並處理SSL握手。

對於某些iRule來說,這當然是可能的,但我無法輕鬆獲得解決方案,並且我無法在Internet上找到任何幫助,因爲F5 doc未打開。 Anyboy是否知道如何去做?

回答

1

我終於找到了解決方案。

的VS默認水煤漿是直接從第一TCP數據包處理SSL解密: 所以要看的第一個TCP數據包,並且,如果它與CONNECT開始,

  • 禁用SSL解密,
  • 與響應HTTP 200,
  • 然後重新啓用SSL解密,爲「客戶您好」將要來之後

它工作在兩個方面:

  • 在TCP上下文中,SSL解密之前,爲了檢測CONNECT請求
  • 和HTTP上下文,以正確的CONNECT請求

     
    when CLIENT_ACCEPTED {  # TCP CONTEXT 
        TCP::collect 7   # look at the first 7 bytes of TCP stream 
    } 
    when CLIENT_DATA { 
        if { [TCP::payload] starts_with "CONNECT" } { 
         SSL::disable  # disable SSL decryption 
        } 
    } 
    
    when HTTP_REQUEST {  # HTTP CONTEXT 
        if { [HTTP::method] eq "CONNECT" } { 
         HTTP::respond 200 # send HTTP 200 
         SSL::enable  # re-enable SSL decryption for next "client hello" 
        } 
    } 
    
響應