2015-10-18 70 views
0

我试图通过https在远程服务器上连接到Tomcat;我找到了很多答案,但没有人为我工作;我在Ubuntu Server 14.04上使用Apache,Tomcat 7。Tomcat 7和无效的密钥库格式

首先,我创建的证书密钥库写作:

keytool -genkey -alias tomcat -keyalg RSA 

后,我已经编辑 “/etc/tomcat7/server.xml” 使用SSL端口8443:

<Connector port="8443" SSLEnabled="true" 
       protocol="org.apache.coyote.http11.Http11Protocol" 
       keystoreType="JKS" 
       maxThreads="150" scheme="https" secure="true" 
       keystoreFile="/usr/lib/jvm/java-7-openjdk-amd64/bin/keytool" 
       keystorePass="***********" keyAlias="tomcat" 
       clientAuth="false" sslProtocol="TLS"/> 

哪里**********是密码;通过重启动Tomcat:

sudo service tomcat7 restart 

我收到以下错误文件 “/var/log/tomcat7/catalina.out”:

SEVERE: Failed to initialize connector [Connector[HTTP/1.1-8443]] 
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-8443]] 
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106) 
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559) 
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102) 
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:813) 
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102) 
    at org.apache.catalina.startup.Catalina.load(Catalina.java:638) 
    at org.apache.catalina.startup.Catalina.load(Catalina.java:663) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:280) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:454) 
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed 
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:980) 
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102) 
    ... 12 more 
Caused by: java.io.IOException: Invalid keystore format 
    at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:650) 
    at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55) 
    at java.security.KeyStore.load(KeyStore.java:1214) 
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getStore(JSSESocketFactory.java:392) 
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeystore(JSSESocketFactory.java:291) 
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeyManagers(JSSESocketFactory.java:549) 
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeyManagers(JSSESocketFactory.java:489) 
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.init(JSSESocketFactory.java:434) 
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSocket(JSSESocketFactory.java:181) 
    at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:397) 
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:640) 
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:434) 
    at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:119) 
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:978) 
    ... 13 more 

密钥库类型为JKS,我

$JAVA_HOME/bin/keytool -list 

已返回:

“VE通过命令验证它
Keystore type: JKS 
Keystore provider: SUN 

Your keystore contains 1 entry 

tomcat, 17-Oct-2015, PrivateKeyEntry, 
Certificate fingerprint (SHA1): 33:14:32:DD:DA:20:BF:CF:70:32:F5:0E:E9:F1:C1:5B:4E:C3:DB:AB 

其中$ JAVA_HOME是“/ usr/lib/jvm/java-7-openjdk-amd64”;

因此,当我尝试连接到“https://myServerIp:8443/”或“https://myDomainName:8443/”时,出现“无法连接”错误。

+1

'keytool'是用于管理密钥存储,所以我想为密钥存储文件的路径程序(/ usr/lib中/ JVM/Java的7-的OpenJDK,AMD64 /斌/ keytool' )在你的tomcat配置中是不正确的。 – Titus

+0

@Titus如果我运行'/ usr/lib/jvm/java-7 -openjdk-amd64/bin/keytool -list'(这与编写'$ JAVA_HOME/bin/keytool -list'相同),它给了我问题底部的数据,是否意味着这是一个正确的密钥库文件? – Daniele

+1

在Linux系统中,当您调用'keytool -list'时,'keytool'程序将读取该文件('.keystore') – Titus

回答

0

现在它工作正常,简称:

  • 指定的.keystore文件的路径
  • 配置Tomcat来使用这个文件

谢谢到@Titus我已经理解问题所在:当我运行命令

keytool -genkey -alias tomcat -keyalg RSA 

或命令

$JAVA_HOME/bin/keytool -genkey -keyalg RSA -alias tomcat 

程序keytool服务器的文件夹中创建文件.keystore;目录/usr/lib/jvm/java-7-openjdk-amd64/jre/bin包含一个名为keystore的文件,但是这个文件对于设置tomcat是不正确的,或者出于某种原因,它不适用于我的情况。 指定文件.keystore的路径,我们可以运行命令

keytool -genkey -alias tomcat -keyalg RSA -keystore /path/.keystore 

之后,我已经配置Tomcat的编辑文件/etc/tomcat7/server.xml用刚刚创建的文件:

<Connector port="8443" SSLEnabled="true" 
       protocol="org.apache.coyote.http11.Http11Protocol" 
       keystoreType="JKS" 
       maxThreads="150" scheme="https" secure="true" 
       keystoreFile="/path/.keystore" 
       keystorePass="************" keyAlias="tomcat" 
       clientAuth="false" sslProtocol="TLS"/> 
+0

你还没有明白。 'bin'目录不包含密钥库。它包含一个名为'keytool'的*可执行文件*,它不是一个密钥库。 keytool生成的'.keystore'文件是keystore。 – EJP

1

enter image description here

只是为了像我这样的初学者进一步支持这个答案。在Windows操作系统

  1. 首先去C:\ Program Files文件\的Java \ jdk1.8, 按Shift + right-click打开命令pront:写这keytool.exe -genkey -alias tomcat -keyalg RSA -keystore /{user.name}/.keystore, 那么问题的顺序将后跟着你可以看到在指定路径

  2. 现在,你需要去的server.xml并用适当的修改一个这个两keystoreFile="${user.home}/.keystore" keystorePass="changeit"产生新的.keytore

相关问题