我创建了一个自签名证书,如下所示:
这是我使用的命令:
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)
我已经推荐了多个论坛,并尝试了多项内容,评论少数听众和其他一些事情,但没有任何效果。请指导我。
答案 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。