SSL calls thru a proxy with authentication?
carlofr Apr 5, 2007 10:09 AMHi!
Have to pass a bluecoat proxy with authentication to make client SSL calls from my application to an external webservice. Running solaris, jdk5 and jboss_4.0.5.GA.
Version 1.4.3.GA accoding to the jboss-remoting.jar
When i read the user documentation for remoting 1.4.0 this seamed like a simple thing. Providing system parameters
-Dhttp.proxyHost=ginger
-Dhttp.proxyPort=80
-DproxySet=true
and some more for usr/passw for proxy invocations:
-Dhttp.proxy.username=username
-Dhttp.proxy.password=password
or these for non-proxied invocations:
-Dhttp.basic.username=username
-Dhttp.basic.password=password
Not really sure what to use so i specify them both.
Using these settings generates this stack:
java.net.UnknownHostException: test.remotehost.com
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177)
at java.net.Socket.connect(Socket.java:516)
at java.net.Socket.connect(Socket.java:466)
at sun.net.NetworkClient.doConnect(NetworkClient.java:157)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:365)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:477)
at sun.net.www.protocol.https.HttpsClient.(HttpsClient.java:278)
at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:335)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnecti
on.java:176)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:747)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:1
62)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:839)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230)
at org.jboss.remoting.transport.http.HTTPClientInvoker.useHttpURLConnection(HTTPClientInvoker.java:163)
at org.jboss.remoting.transport.http.HTTPClientInvoker.transport(HTTPClientInvoker.java:81)
at org.jboss.remoting.RemoteClientInvoker.invoke(RemoteClientInvoker.java:143)
at org.jboss.remoting.Client.invoke(Client.java:525)
at org.jboss.remoting.Client.invoke(Client.java:488)
at org.jboss.ws.soap.SOAPConnectionImpl.call(SOAPConnectionImpl.java:189)
at org.jboss.ws.jaxrpc.CallImpl.invokeInternal(CallImpl.java:687)
at org.jboss.ws.jaxrpc.CallImpl.invoke(CallImpl.java:404)
at org.jboss.ws.jaxrpc.CallProxy.invoke(CallProxy.java:148)
at $Proxy105.SSEKService(Unknown Source)
No calls to my proxyHost according to a netstat -a.
If i check the jboss source code it's not in a state where it could handle any kind of response like "407 Proxy Authentication Required"
If i then change all settings to instead use -Dhttps i get a bit further but it gives me this stack:
java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required"
at sun.net.www.protocol.http.HttpURLConnection.doTunneling(HttpURLConnection.java:1327)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnec
tion.java:168)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:839)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230)
at org.jboss.remoting.transport.http.HTTPClientInvoker.useHttpURLConnection(HTTPClientInvoker.java:163)
at org.jboss.remoting.transport.http.HTTPClientInvoker.transport(HTTPClientInvoker.java:81)
at org.jboss.remoting.RemoteClientInvoker.invoke(RemoteClientInvoker.java:143)
at org.jboss.remoting.Client.invoke(Client.java:525)
at org.jboss.remoting.Client.invoke(Client.java:488)
at org.jboss.ws.soap.SOAPConnectionImpl.call(SOAPConnectionImpl.java:189)
at org.jboss.ws.jaxrpc.CallImpl.invokeInternal(CallImpl.java:687)
at org.jboss.ws.jaxrpc.CallImpl.invoke(CallImpl.java:404)
at org.jboss.ws.jaxrpc.CallProxy.invoke(CallProxy.java:148)
at $Proxy105.SSEKService(Unknown Source)
If i do a snoop on this network activity, i can see the proxy trying to get some authentication from my outgoing call, but it doesnt provide it. Now i seams to using the proxy part from jdk5 according to the stack (and by looking in the jdk-source).
Any suggestions on correct way to specify the host, user and password?
Thanks in advance :) /Fredrik