【问题标题】:Tomcat - null pointer exception when starting with SSL connectorTomcat - 从 SSL 连接器开始时出现空指针异常
【发布时间】:2016-11-12 12:15:49
【问题描述】:

我想为我的 Tomcat 9.0 服务器添加 SSL 可能性。正如 Tomcat 的指令所说,我已经使用 keytool 生成了一个密钥,并在 server.xml 文件中添加了以下连接器

<Connector
       protocol="org.apache.coyote.http11.Http11NioProtocol"
       port="8443" maxThreads="200"
       scheme="https" secure="true" SSLEnabled="true"
       keystoreFile="C:\Moje_programy\spring\apache-tomcat-9.0.0.M11\klucz" keystorePass="samplepassword"
       clientAuth="false" sslProtocol="TLS"/>

当我尝试启动服务器时,我收到以下错误(并且 ssl 端口不工作):

12-Nov-2016 13:06:18.187 WARNING [main] org.apache.tomcat.util.net.openssl.OpenSSLContext.init Error initializ ing SSL context  java.lang.NullPointerException
        at org.apache.tomcat.util.net.openssl.OpenSSLContext.init(OpenSSLContext.java:276)
        at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:100)
        at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:80)
        at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:245)
        at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:866)
        at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:575)
        at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:65)
        at org.apache.catalina.connector.Connector.initInternal(Connector.java:944)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:105)
        at org.apache.catalina.core.StandardService.initInternal(StandardService.java:549)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:105)
        at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:873)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:105)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:606)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:629)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:311)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:494)

不知道是bug还是我做错了..

【问题讨论】:

    标签: tomcat ssl config


    【解决方案1】:

    解决方案很神奇,但是在生成密钥时,别名属性必须设置为“tomcat”

    这是我的例子:

    c:\Program Files\Java\jdk1.8.0_112\bin>keytool -genkey -alias tomcat -keyalg RSA -keystore C:\Moje_programy\spring\apache-tomcat-9.0.0.M11\klucz
    

    【讨论】:

    • 使用 Webapp Runner 的类似问题,除了 -Djavax.net.ssl.keyStore=-Djavax.net.ssl.keyStorePassword= 之外,还必须添加 -Djavax.net.ssl.keyStoreAlias=mydomain.com。 (别名是 Portecle 打开 .jks 时首先看到的内容)
    【解决方案2】:

    在您的回答的帮助下,我也找到了另一个答案。您可以拥有自定义证书别名和我的方法,如下所示

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
                   maxThreads="150" SSLEnabled="true">
            <SSLHostConfig>
                <Certificate certificateKeystoreFile="<path to keystore>\myks.jks"
                certificateKeystorePassword="abc123"
                certificateKeyAlias="giganet.com"
                             type="RSA" />
            </SSLHostConfig>
        </Connector>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 2017-07-09
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多