开发者社区> 问答> 正文

关于tomcat配置SSL协议,生成密钥对以及证书出现问题,请问怎么解决?:报错

命令如下 

CMD管理员身份运行
进入tomcat7的目录

新建密钥对
Keytool -genkey -alias tomcat_a -keyalg RSA -storepass changeit -keystore server.keystore -validity 7
除了姓氏 填入localhost 其他全部是直接回车

第一步是导出证书,
Keytool -export -trustcacerts -alias tomcat_a -file server.cer -keystore server.keystore -storepass changeit

第二步是导入到证书信任库
Keytool -import -trustcacerts -alias  tomcat_a -file server.cer -keystore C:/"Program Files"/Java/jdk1.7.0_67/jre/lib/security/cacerts  -storepass changeit

以上命令全部执行成功

其中秘钥库口令写在命令中是:changeit

秘钥口令直接回车与秘钥库口令相同也是:changeit

文件也有了。

配置tomcat 的server.xml

添加:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" 
           minSpareThreads="5" maxSpareThreads="75" 
           enableLookups="true" disableUploadTimeout="true"   
           acceptCount="100"  maxThreads="200" 
           scheme="https" secure="true" SSLEnabled="true" 
           clientAuth="false" sslProtocol="TLS" 
           keystoreFile="E:/apache-tomcat-7.0.77-ssl/server.keystore"
           truststoreFile="C:/Program Files/Java/jdk1.7.0_67/jre/lib/security/cacerts"
           keystorePass="changeit"
		   />

之后启动tomcat报错:

放大:

Caused by: java.security.UnrecoverableKeyException: Cannot recover key
        at sun.security.provider.KeyProtector.recover(KeyProtector.java:328)
        at sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:138)
        at sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:55)
        at java.security.KeyStore.getKey(KeyStore.java:1011)
        at sun.security.ssl.SunX509KeyManagerImpl.<init>(SunX509KeyManagerImpl.java:133)
        at sun.security.ssl.KeyManagerFactoryImpl$SunX509.engineInit(KeyManagerFactoryImpl.java:70)
        at javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.java:256)
        at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeyManagers(JSSESocketFactory.java:645)
        at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeyManagers(JSSESocketFactory.java:574)
        at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:495)
        at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:715)
        at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:452)
        at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:119)
        at org.apache.catalina.connector.Connector.initInternal(Connector.java:978)
        ... 13 more

请问怎么解决?

 

展开
收起
kun坤 2020-06-14 10:06:38 946 0
1 条回答
写回答
取消 提交回答
  • 已经解决,我电脑里安装了两个版本的JDK。

    JDK7 和 JDK8

    系统环境变量里配置的是8,

    7是用来给eclispe中添加开发环境用的。

    这里SSL命令里设置JDK的以及问题中tomcat的server.xml  中配置的都是JDK7,都改成JDK8就可以了。

    现在报了另外一个错误(学习http://blog.csdn.net/xuxuchuan/article/details/54924933#reply)配置cas3.5.2:

    java.io.FileNotFoundException: D:\cas-chenjie\cas.properties (系统找不到指定的文件。)>

     上面错误解决,因为tomcat 的原因,重新解压一份新的tomcat,将证书复制进去,将server.xml配置项复制进去,放入cas.war即可

    2020-06-14 10:06:44
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Apache Tomcat 的云原生演进 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载