在tomcat连接器

时间:2016-06-06 11:12:22

标签: java tomcat ssl cryptography

我想在tomcat(版本8)连接器中指定slImplementationName类名,以便不考虑SSL握手部分中java.security中的默认顺序。

来自tomcat文档: -

  

“要使用的SSL实现的类名。如果未指定,   org.apache.tomcat.util.net.jsse.JSSEImplementation的默认值为   用于包装JVM的默认JSSE提供程序。注意JVM可以   被配置为使用不同的JSSE提供程序作为默认“

但是这并未指定java中可以与此属性一起使用的实现类。

While trying to start tomcat by chnaging the attribut i am getting exception:-

06-Jun-2016 12:05:15.639 SEVERE [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[HTTP/1.1-9443]]
 org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-9443]]
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)
        at org.apache.catalina.core.StandardService.initInternal(StandardService.java:567)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
        at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:851)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:576)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:599)
        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:310)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:484)
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
        at org.apache.catalina.connector.Connector.initInternal(Connector.java:962)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
        ... 12 more
Caused by: java.lang.ClassNotFoundException: Error loading SSL Implementation com.sun.security.sasl.Provider :java.lang.ClassCastException: com.sun.security.sasl.Provider cannot be cast to org.apache.tomcat.util.net.SSLImplementation
        at org.apache.tomcat.util.net.SSLImplementation.getInstance(SSLImplementation.java:75)
        at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:119)
        at org.apache.catalina.connector.Connector.initInternal(Connector.java:960)
        ... 13 more

我尝试过使用“com.sun.net.ssl.internal.ssl.Provider”和“com.sun.security.sasl.Provider”,但没有运气。

任何指针都非常有用。

1 个答案:

答案 0 :(得分:1)

sslImplementationName的班级必须延长org.apache.tomcat.util.net.SSLImplementation。因此,当您指定不满足此条件的类时,将抛出异常。

由于您的目的是更改加密服务提供商的默认顺序。您应该覆盖每个JVM实例的安全配置。确保security.overridePropertiesFile=true中的$JRE_HOME/lib/security/java.security

然后修改Tomcat启动命令并添加系统属性:

  

-Djava.security.properties = _path_to_your_config _

对于Java8,它可以追加或覆盖$JRE_HOME/lib/security/java.security中的设置。对于旧版本,它将完全覆盖所有设置。