Hi,

 

I'm experiencing a problem with creating an SSL Connector in Tomcat
7.0.26. We intend to use a database-based keystore, which means that we
are using a custom-made Provider which does not use the 'keystoreFile'
tag. To try to prevent Tomcat from trying to open a file we specify the
Connector in this way:

 

        <Connector SSLEnabled="true" URIEncoding="UTF-8"
clientAuth="false"

            keyAlias="TestCert" keystoreFile="" keystoreType="Custom"
port="443"

            protocol="HTTP/1.1" scheme="https" secure="true"
sslProtocol="TLS"/>

 

This used to work in Tomcat 6.0.32, but when we upgraded to Tomcat 7.0,
this exception gets thrown in the error stream :

 

SEVERE: Failed to load keystore type Custom with path E:\Program
Files\Application\configuration\services\tomcat\ due to E:\Program
Files\Application\configuration\services\tomcat (Access is denied)

java.io.FileNotFoundException: E:\Program
Files\Application\configuration\services\tomcat (Access is denied)

               at java.io.FileInputStream.open(Native Method)

               at java.io.FileInputStream.<init>(Unknown Source)

               at
org.apache.tomcat.util.net.jsse.JSSESocketFactory.getStore(JSSESocketFac
tory.java:400)

               at
org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeystore(JSSESocket
Factory.java:306)

               at
org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeyManagers(JSSESoc
ketFactory.java:565)

               at
org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeyManagers(JSSESoc
ketFactory.java:505)

               at
org.apache.tomcat.util.net.jsse.JSSESocketFactory.init(JSSESocketFactory
.java:449)

               at
org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSocket(JSSESocke
tFactory.java:158)

               at
org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:378)

               at
org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:5
54)

               at
org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:409)

               at
org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11J
sseProtocol.java:119)

               at
org.apache.catalina.connector.Connector.initInternal(Connector.java:956)

               at
org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)

               at
org.apache.catalina.core.StandardService.initInternal(StandardService.ja
va:559)

               at
org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)

               at
org.apache.catalina.core.StandardServer.initInternal(StandardServer.java
:815)

               at
org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)

               at
org.apache.catalina.startup.Catalina.load(Catalina.java:594)

               at
org.apache.catalina.startup.Catalina.load(Catalina.java:619)

               at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)

               at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown
Source)

               at
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

               at java.lang.reflect.Method.invoke(Unknown Source)

               at
org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)

               at
org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:449)

 

Is this a bug in Tomcat 7.0 or is there an alternative method we're
supposed to use in order to prevent it from loading a keystoreFile from
the file system?

 

I took a look at the source through a debugger and found the area in
JSSESocketFactory where it reads this file, and it seems as though
specifying "" doesn't work correctly anymore because it tries to map a
relative path to catalina.base

 

 

Reply via email to