Tomcat HTTPS 启用自签名证书失败

标签 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) 您的命令 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.

您可以省略协议(protocol)参数。 Tomcat 在 PATH 环境变量中搜索 native 库。 See https://tomcat.apache.org/tomcat-8.0-doc/config/http.html

更新

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

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

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

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

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

then the implementation used by Tomcat is chosen automatically.

比如 Tomcat。

关于Tomcat HTTPS 启用自签名证书失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48653244/

相关文章:

java - 如何将 SSLContext 与 Axis 一起使用

java - 收到致命警报 :bad_certificate in java web service

django - 在 Nginx 后面通过 HTTPS 访问 Django Admin

tomcat - Grails 3.3 - 如何在 yml 配置文件中以开发模式设置嵌入式 tomcat 的 URIEncoding

java - 无法在部署到 Heroku 的 Java Tomcat 服务器中执行工作进程

amazon-web-services - 如何将我的网站作为在 AWS 中作为 Docker swarm 集群运行的 https 运行?

apache - 未加载 SSL 证书

java - Spring 3.2 @Configurable 和@Autowire 无法注入(inject)任何东西

java - 为什么更新 HttpServletResponse 需要这么长时间? ( Apache 汤姆猫)

node.js - SELF_SIGNED_CERT_IN_CHAIN 和 DEPTH_ZERO_SELF_SIGNED_CERT 有什么区别