tomcat8.5版本和tomcat8.0有了很大的区别,默认的server.xml中https的配置方式也有了变化:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" secure="true" URIEncoding="UTF-8" useBodyEncodingForURI="true">
<SSLHostConfig certificateVerification="optional">
<Certificate certificateKeystoreFile="${catalina.home}/bin/mykey.jks" certificateKeystorePassword="mypassword"/>
</SSLHostConfig>
</Connector>

然而当启动的时候,却报出了空指针错误:

02-Dec-2016 17:49:02.885 警告 [main] org.apache.tomcat.util.net.openssl.OpenSSLContext.init Error initializing SSL context
java.lang.NullPointerException
at org.apache.tomcat.util.net.openssl.OpenSSLContext.init(OpenSSLContext.java:281)
at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:101)
at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:81)
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:245)
at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:875)
at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:213)
at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:558)
at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:65)
at org.apache.catalina.connector.Connector.initInternal(Connector.java:968)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
at org.apache.catalina.core.StandardService.initInternal(StandardService.java:549)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:875)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
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)

查源代码发现,tomcat8.5代码中要求有别名,如果没有配置,默认使用“tomcat”作为别名。显然,我们的证书别名不会是tomcat。

我们可以使用如下命令查看证书的别名:

keytool -list  -v -keystore xxxx.keystore -storepass 密码

比如:

D:\tomcat\tomcat858s\bin>keytool -list -v -keystore mykey.jks -storepass mypassword
密钥库类型: JKS
密钥库提供方: SUN 您的密钥库包含 个条目 别名:
创建日期: --
条目类型: PrivateKeyEntry
证书链长度:
证书[]:
所有者: CN=*.guyezhai.com, O=XXXXXXXXXXXXXXXXXX, L=北京市, ST=北京市, C=CN
发布者: CN=WoSign Class OV Server CA G2, O=WoSign CA Limited, C=CN
序列号: 567ab6b63782bdb9e44eba04dc27efe8
有效期开始日期: Thu Mar :: CST , 截止日期: Fri Mar :: CST
证书指纹:
MD5: ::7C:5A:4F:D8:5F:C7:D1:A2:::C5:4A:EE:A3
SHA1: F7::A7:4A::DD:B9:5F::::::C9:3E::3D:A7:3D:E2
SHA256: ::E0::7C:BD:BA::E8::::8E:4D:2A:2B:5C:A7::D0:F0:7A::B6:D7:9D:B0:D7:::BA:
签名算法名称: SHA256withRSA
版本: ...

可以看到,此证书的别名是“1”,我们就可以在server.xml中配置别名了:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" secure="true" URIEncoding="UTF-8" useBodyEncodingForURI="true">
<SSLHostConfig certificateVerification="optional">
<Certificate certificateKeystoreFile="${catalina.home}/bin/mykey.jks" certificateKeystorePassword="mypassword" certificateKeyAlias="1"/>
</SSLHostConfig>
</Connector>

添加certificateKeyAlias="1"

然后再次启动tomcat,空指针报错就消失了。

Tomcat8.5配置https启动报空指针错误的更多相关文章

  1. springboot 配置jpa启动报Error processing condition on org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration.pageableCustomizer

    springboot +gradle 配置jpa启动报Error processing condition on org.springframework.boot.autoconfigure.data ...

  2. LR录制https协议报证书错误,导航已阻止

    使用IE浏览器录制https协议报证书错误,导航已阻止,修改如下配置文件:

  3. MYSQL启动报1067错误,系统日志中是“服务 mysql 意外停止” Mysql日志中则是:“Plugin \'FEDERATED\' is disabled”

    MYSQL启动报1067错误,系统日志中是"服务 mysql 意外停止" Mysql日志中则是:"Plugin \'FEDERATED\' is disabled&quo ...

  4. mysql启动错误之mysql启动报1067错误如何解决

    MYSQL启动报1067错误,系统日志中是“服务 mysql 意外停止” Mysql日志中则是:Plugin 'FEDERATED' is disabled. 解决方法: 1.在MY.INI文件中的 ...

  5. 切记切记:Spring配置文件中,Component-scan无法扫描到的类中的自动装配对象无法被调用,报空指针错误。

    Spring单例注入,单例对象可设置成Spring元件. 只有Spring的元件中@Autowired才有用,在普通类中@Autowired虽然不会编译报错,但运行时会报空指针错误.

  6. 1.Maven+SpringMVC+Eclipse软件安装配置,Maven报插件错误,Eclipse总是卡死的解决办法,导入一个maven工程后 一直显示importing maven project

     使用Maven+SpringMVC+Eclipse软件安装配置过程中的问题: 1.Eclipse总是卡死的解决办法: 一:内存不足所以会卡死,配置一下eclipse.ini修改这几个值就好了-X ...

  7. eclipse配置tomcat后启动报内存错误解决方法

    一.双击tomcat服务,打开配置界面 二.打开launch configuration窗口,在Argument最后面加入:-Xms256m -Xmx512m -XX:PermSize=256M -X ...

  8. spring boot项目启动报DataSource错误

    初建一个简单的spring boot 项目,启动后会报错. Exception encountered during context initialization - cancelling refre ...

  9. Tomcat启动报ClassNotFoundException错误,解决

    今天把一个Maven管理的web项目Update后,启动Tomcat(Eclipse中)系统报错.错误提示 java.lang.ClassNotFoundException: ,显示是spring的C ...

随机推荐

  1. Docker-Compose 安装

    1. 什么是Docker-Compose Compose项目来源于之前的fig项目,使用python语言编写,与docker/swarm配合度很高. Compose 是 Docker 容器进行编排的工 ...

  2. Log4J日志信息配置文件详解

    原文地址: http://blog.csdn.net/wuxintdrh/article/details/78282097 使用log4j 记录日志甚是方便,其提供了两种日志配置方式,log4j.pr ...

  3. 获取或操作DOM元素特性的几种方式

    1. 通过元素的属性 可以直接通过元素属性获取或操作特性,但是只有公认的特性(非自定义的特性),例如id.title.style.align.className等,注意,因为在ECMAScript中, ...

  4. xhtml的3種文檔聲明類型

    xhtml有三種文檔聲明類型: strict:使用嚴格的標記,避免語法上的混亂: trasitional:為不支持的css的瀏覽器編寫xhtml時: frameset:利用框架將窗口分割為兩個部分或多 ...

  5. anaconda2安装cv2

    http://m.blog.csdn.net/u010167269/article/details/62447648 下载离线安装包:https://anaconda.org/menpo/opencv ...

  6. MySQL中char、varchar和nvarchar的区别

    一.char和varchar的区别char是固定长度的,而varchar会根据具体的长度来使用存储空间,另外varchar需要用额外的1-2个字节存储字符串长度.1). 当字符串长度小于255时,用额 ...

  7. QT 5 安装 vs2017 后,出现找不到 rc.exe 问题

    QT 5 安装 vs2017 后,出现找不到 rc.exe 问题 qt 5 cannot run 'rc.exe' 出现这种错误,是因为,rc.exe  未找到,也就是 SKD 路径不对. 找到相应的 ...

  8. Caused by: org.xml.sax.SAXParseException; lineNumber: 1

    百分百是你的MYBATIS 的xml 里面的 xml节点没写对,或者忘记关闭,或者格式不对

  9. MT【39】构造二次函数证明

    这种构造二次函数的方法最早接触的应该是在证明柯西不等式时: 再举一例: 最后再举个反向不等式的例子: 评:此类题目的证明是如何想到的呢?他们都有一个明显的特征$AB\ge(\le)C^2$,此时构造二 ...

  10. 分数模板(C++模板)

    貌似没什么用...没有多少毒瘤题要输出分数吧... update:真的有,而且在NOIP模拟赛里出现了!写double的卡精度到怀疑人生! 可以套个兼容性比较好的高精度模板进来. #include&l ...