2017-08-28 249 views
1

我已经从godaddy购买了ssl证书,并且在将它配置为使用Tomcat运行时遇到了一些问题。特别是我收到以下错误信息:Tomcat godaddy ssl证书私钥错误

java.security.KeyStoreException: Cannot store non-PrivateKeys 

Godaddy的给出了证书3个文件,我试图把它们添加到密钥库如下:

keytool -import -alias root -keystore tomcat.keystore -trustcacerts -file gd_bundle-g2-g1.crt 
keytool -import -alias intermed -keystore tomcat.keystore -trustcacerts -file gdig2.crt.pem 
keytool -import -alias tomcat -keystore tomcat.keystore -trustcacerts -file <random hex string>.crt 

,我发现在这里:http://www.calamitycoder.com/WebSiteNotes/goDaddySHA2SSL.php

我已经配置Tomcat的server.xml中为:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" 
     maxThreads="150" SSLEnabled="true" scheme="https" secure="true" 
    keystoreFile="${user.home}/tomcat.keystore" keystorePass="password" 
    clientAuth="false" sslProtocol="TLS"> 

`

Tomcat版本是8.5.20。

任何帮助将不胜感激。不知道这是不是Tomcat版本,因为我在搜索几个小时后还没有发现这个错误。 谢谢!

更新:

我删除了当前键:

sudo keytool -delete -alias root -keystore tomcat.keystore 
sudo keytool -delete -alias intermed -keystore tomcat.keystore 
sudo keytool -delete -alias tomcat -keystore tomcat.keystore 

,并添加作为评价推荐键:

keytool -import -alias root -keystore tomcat.keystore -trustcacerts -file gd_bundle-g2-g1.crt 
keytool -import -alias tomcat -keystore tomcat.keystore -file <random hex string>.crt 

但不幸的是找到了同样的错误:

Caused by: java.security.KeyStoreException: Cannot store non-PrivateKeys 
    at sun.security.provider.JavaKeyStore.engineSetKeyEntry(JavaKeyStore.java:258) 
    at sun.security.provider.JavaKeyStore$JKS.engineSetKeyEntry(JavaKeyStore.java:56) 
    at sun.security.provider.KeyStoreDelegator.engineSetKeyEntry(KeyStoreDelegator.java:117) 
    at sun.security.provider.JavaKeyStore$DualFormatJKS.engineSetKeyEntry(JavaKeyStore.java:70) 
    at java.security.KeyStore.setKeyEntry(KeyStore.java:1140) 
    at org.apache.tomcat.util.net.jsse.JSSEUtil.getKeyManagers(JSSEUtil.java:226) 

我会继续玩这个,任何额外的想法是最受欢迎的。谢谢 !

+0

导入签名证书(十六进制名称)时,必须省略'-trustcacerts',并使用您在生成密钥对和CSR时使用的相同别名。不要导入PEM文件。 – EJP

+0

我建议前往Godaddy官方网站,并按照如何导入证书的说明以及如何正确创建您的密钥存储库:https://ca.godaddy.com/help/tomcat-generate-csrs-and-install-证书-5239 –

+0

而*不*遵循任意的互联网垃圾。官方网站是有原因的。 NB找不到您的链接。 – EJP

回答

0

其他研究:

GoDaddy的证书

CentOS的1611年7月3日

唯一的变化 - Tomcat的20年5月8日从8.5.3

的conf/server.xml中升级

Connector 
     protocol="org.apache.coyote.http11.Http11NioProtocol" 
     port="8443" maxThreads="200" 
     scheme="https" secure="true" SSLEnabled="true" 
     keystoreFile="tomcat.keystore" keystorePass="secret" 
     clientAuth="false" ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA" 
     sslProtocol="TLSv1.2" 

在Tomcat 8.5.3中工作但在8.5.20中

org.apache.coyote.AbstractProtocol.init Failed to initialize end point associated with ProtocolHandler ["https-jsse-nio-8443"] 
java.lang.IllegalArgumentException: java.security.KeyStoreException: Cannot store non-PrivateKeys 
    at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:114) 
    at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:85) 
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:225) 
0

将其更改为直接使用证书文件。还要将密钥文件添加到配置中。

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" > 
    <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /> 
    <SSLHostConfig> 
     <Certificate certificateKeyFile="conf/*.key" 
        certificateFile="conf/<random hex string>.crt" 
        certificateChainFile="conf/gd_bundle-g2-g1.crt" 
        type="RSA" /> 
    </SSLHostConfig> 
</Connector> 
0

自20年8月5日,我与我的证书同样的错误信息,我必须明确地设置别名与

<Connector keyAlias="tomcat" .... > 
在连接器

。在我添加别名之前,Tomcat试图使用包含的CA证书并失败。