I'm comfortable with the basics of Bluemix Secure Gateway, but I can't see a good way to set up what must surely be a common scenario.
My requirements are:
- Existing internal service is provided over TLS, and must remain so. It doesn't check client certs, it's just a conventional https:// ReST API.
- External end of the Secure Gateway pipe must check client certificates, to only allow certain known clients to connect.
The second point is achieved by choosing the TLS Mutual Auth option when setting up the destination in the Secure Gateway UI. However, this creates a TLS connection from the client app (actually just a browser at this point) to the internal end of the Secure Gateway pipe. What comes out the end of that pipe, towards the internal service, is plain HTTP in the clear. The internal service rightly rejects this, as it's expecting HTTPS.
I can make a working connection by configuring the Secure Gateway with no TLS, and then I get a TLS connection from the client browser all the way to the internal server, but the problem here is that the Bluemix pipe is wide open for anybody on the Internet to throw things at the internal server, and although we all know that the "trusted internal network" ought to be a myth, the fact is that this thing was never set up to be Internet-facing. I want to block anyone except my known client at the outer end of the Bluemix pipe.
I think what I need is a way for the internal end of the pipe, running in the docker image, to start a second TLS session with the internal server. Seems like an obviously necessary feature, but I can't find any reference to it in the docs. Or is there some other way I've missed?