Tomcat HTTPS使用自签名证书启用失败

时间:2018-02-06 22:49:25

标签: tomcat ssl https

我创建了一个自签名证书,如下所示:

Created self-signed cert as shown below

这是我使用的命令:

keytool -genkey -v 
-keystore C:\softwares\apache-tomcat\KeyStore\selfcert.keystore 
-keyalg RSA -storepass XXXX -validity 360

我将server.xml更新为:

<Connector SSLEnabled="true" clientAuth="false"
compressableMimeType="text/html,text/xml,application/xml" compression="on"
keystoreFile="C:\softwares\apache-tomcat\KeyStore\selfcert.keystore"
keystorePass="XXXX" maxThreads="150" port="8443"
protocol="org.apache.coyote.http11.Http11Protocol"
proxyPort="443" scheme="https" secure="true" sslProtocol="TLS"/>

当我运行服务器时,我收到以下错误:

Feb 06, 2018 12:29:06 PM org.apache.catalina.util.LifecycleBase handleSubClassException
SEVERE: Failed to initialize component [Connector[org.apache.coyote.http11.Http11Protocol-8443]]
org.apache.catalina.LifecycleException: Protocol handler instantiation failed
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:911)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:530)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:875)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
    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)

我已经推荐了多个论坛,并尝试了多项内容,评论少数听众和其他一些事情,但没有任何效果。请指导我。

1 个答案:

答案 0 :(得分:0)

我看到更多有问题的地方

1)你的命令kyetool应该包含参数:

 -alias my.domain.cn

另见: https://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html

2)在server.xml中你有protocol =“org.apache.coyote.http11.Http11Protocol”。  您没有写下您使用的Tomcat版本。 但是使用非阻塞连接器或APR更好(来自config tomcat 8文档)。 也许org.apache.coyote.http11.Http11Protocol在您的系统上不可用?

org.apache.coyote.http11.Http11NioProtocol - non blocking Java connector
org.apache.coyote.http11.Http11AprProtocol - the APR/native connector.

您可以不使用协议参数。 Tomcat在PATH环境变量中搜索本机库。 See https://tomcat.apache.org/tomcat-8.0-doc/config/http.html

<强>更新

1)keytool 选项-alias不是必需的(是的,你是对的EJP)。它用作默认别名“mykey”。但是如果你想生成第二个证书,你必须使用不同的别名。 但是,根据我的经验,如果未使用限定名称=主机名,则自签名证书将被Oracle Web Service拒绝

2)IO 因为我不知道你使用哪个操作系统(可能是Windows)和哪个版本的Tomcat,Java,我假设是Tomcat 8或9。 从版本8.5开始,org.apache.coyote.http11.Http11Protocol不在发行版中。解决方案是使用

`org.apache.coyote.http11.Http11NioProtocol`.
or
org.apache.coyote.http11.Http11Nio2Protocol

对于以前的版本: 您还可以自行检查系统可用的协议。 在目录$ CATALINA_HOME / lib中调用

jar tvf tomcat-coyote.jar | grep org.apache.coyote.http11.Http11Nio

输出显示您可以使用的NIO类。 或者你可以避免定义协议:

  

然后自动选择Tomcat使用的实现。

说Tomcat。

相关问题