Hi,
I am using Tomcat 5.5 and I want to forward incoming requests at port 80 to
port 443 (i.e. SSL secure connection). This I have achieved quite easily
via the following configuration:
web.xml:
<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<!-- auth-constraint goes here if you requre authentication -->
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
server.xml:
<Connector port="80" redirectPort="443" />
<Connector port="443" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="conf/keystore.jks"
keystorePass="xyz" maxPostSize="15728640" />
I have created the certificates, etc. and it works fine and if i type
http://localhost I am redirected to https://localhost and the login page is
shown. But, during login, I am making a web service call. These web
services are deployed on the same Tomcat and are accessed via
http://localhost/axis2/rest...
When i try to login I am getting an exception:
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at
java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:520)
at
com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:545)
at
com.sun.net.ssl.internal.ssl.SSLSocketImpl.<init>(SSLSocketImpl.java:389)
at
com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.java:121)
at
org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory.createSocket(SSLProtocolSocketFactory.java:81)
at
org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory.createSocket(SSLProtocolSocketFactory.java:126)
So i figured that the web service call is also being accessed via SSL and
that is not supportted by the caller. Anyway to get around this I have
tried a NUMBER of things:
1. I added a second security-constraint in web.xml with url pattern as
/axis2/* which has transport-guarantee as NONE.
2. I added a 2nd <service> to my server.xml that has the web services
deployed on a different port.
3. And a whole lot of other things that were useless :(
Is it even possible to do this, going from https -> http (they are 2
separate applications mind you)? Does anyone have any suggestions on how to
fix this? This is driving me nuts! Thanks!