Forum Discussion
Using BIG-IP LTM as a forward proxy, SSL problem!
Hi, I have deployed a F5 BIG-IP with LTM and Forward SSL as a forward proxy.
I am using the F5 as a "air-gap" so I can do content inspection with a FireEye and Checkpoint appliance. I am not using the reference design of 2 boxes, but just one, where I forward traffic from one VS to the Checkpoint appliance, and the checkpoint has a new VS as the nexthop in its routing table.
The problem I am facing is that some sites won't work using SSL-decryption. Like tyk.io, play.spotifiy.com, docks.docker.com among others.
We get the SSL_mismatch error in firefox and Chrome.
I have used tcpdump and SSLdump to check the traffic, and it seems like the F5 is doing everything as it should, but still the browsers give me a SSL mismatch error.
The F5 is a full-proxy, so what cipher the F5 and the web-server is using should not have any impact on what the clients browser and F5 are using? Or could that be the issue?
Anyway, is someone else using the F5 as a forward proxy, and have a mostly working Cipher string to use on the VS that are communicating with internet?
5 Replies
- Kevin_Stewart
Employee
I'm not entirely sure about spotify, unless you're just spelling it incorrectly (play.spotifiy.com), but the other two sites require SNI (server name indication), which is not yet functional in the air gap config. Support for that is forthcoming.
- ReWrite_132188
Nimbostratus
Oh, I got Spotify working. Was a network admin that had blocked UDP/443..
So, without SNI support, there is no way to make the sites work using airgap?
- Kevin_Stewart
Employee
There is. I got it working with an iRule patch this morning, but give me a day or two to work out some bugs.
As for tyk.io, SNI is only one of the problems there. That site appears to require ECDHE-ECDSA, and as it happens, ECDSA is the one cipher not currently supported in SSL forward proxy (as of 11.6).
- ReWrite_132188
Nimbostratus
Oh, really? Thats amazing. I was in contact with Support that told me SNI support on Forward Proxy was 2-3 months away, but it would be cool If we could get around it with iRules. :)
- Kevin_Stewart
Employee
Okay, I'm back. 😉
The following iRule mods are for the SSL Intercept iApp. I see that you may be doing something manual, but you may want to try the iApp since it's doing pretty much the same thing and should be able to support your config. So you'll build the iApp and that'll create two iRules - an ingress iRule and an egress iRule.
Here's the modified ingress iRule:
when CLIENT_ACCEPTED { HTTP::disable SSL::disable clientside SSL::disable serverside TCP::collect } when CLIENT_DATA { binary scan [TCP::payload] c type if { ( $type == 23 ) or ( $type == 20 ) } { SSL::enable clientside SSL::enable serverside } elseif { $type == 22 } { SSL::enable clientside SSL::enable serverside HTTP::enable } TCP::release } when CLIENTSSL_CLIENTHELLO { if { [SSL::extensions exists -type 0] } { binary scan [SSL::extensions -type 0] @9a* tls_servername } } when HTTP_REQUEST { if { [info exists tls_servername] } { HTTP::header insert X-Proxy-HTTPS "[TCP::local_port]:${tls_servername}" } else { HTTP::header insert X-Proxy-HTTPS "[TCP::local_port]:0" } LB::detach SSL::disable serverside CHANGE THIS TO REFLECT THE REAL INGRESS (PORT 80) POOL NAME pool airgap_ingress_pool_80 }And the modified egress iRule:
when HTTP_REQUEST { if { not ( [HTTP::header exists X-Proxy-HTTPS] ) } { SSL::disable serverside CHAING THIS TO REFLECT THE REAL EGRESS *ANY* POOL NAME pool airgap_egress_pool_any } else { if { [lindex [split [HTTP::header X-Proxy-HTTPS] ":"] 1] ne "0" } { set servername [lindex [split [HTTP::header X-Proxy-HTTPS] ":"] 1] } node [lindex [active_nodes -list airgap_egress_pool_any] 0] [lindex [split [HTTP::header X-Proxy-HTTPS] ":"] 0] HTTP::header remove X-Proxy-HTTPS } } when SERVERSSL_CLIENTHELLO_SEND { if { [info exists servername] } { set bin [binary format S1S1S1S1ca* 0 [expr [string length ${servername}] + 5] [expr [string length ${servername}] + 3] 0 [string length ${servername}] ${servername}] SSL::extensions insert $bin } }This iRule specifically supports sending SNI across the inspection gap to the egress re-encryption VIP. It'll make it into the iApp soon. As for tyk.io, this site specifically requires ECDHE-ECDSA, which isn't supported in forward proxy SSL until 11.6 HF5 and 12.0. You'll need to upgrade to one of these versions to support these ciphers.
Help guide the future of your DevCentral Community!
What tools do you use to collaborate? (1min - anonymous)Recent Discussions
Related Content
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com