2015-10-18 2 views
0

Я пытаюсь подключиться к Tomcat через https на удаленном сервере; Я нашел много ответов, но никто не работал для меня; Я использую Apache, Tomcat 7 на Ubuntu Server 14.04.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 

который вернулся:

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/Библиотека/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 файл хранилища ключей сохраняется по умолчанию в домашней папке пользователя '/ home/userName/.keystore' – Titus

ответ

0

Сейчас он работает правильно, короче:

  • Я указан путь к файлу .keystore
  • Я сконфигурированной Tomcat использовать этот файл

Спасибо to @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' * не * содержит хранилище ключей. Он содержит * исполняемый файл * called'keytool', который не является хранилищем ключей. Файл '.keystore' *, созданный * keytool, является хранилищем ключей. – 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, Последовательность вопроса будет следовать после того, что вы появится новый .keytore генерируемых на указанном пути

  2. Теперь вам нужно пойти в server.xml и изменить это два keystoreFile="${user.home}/.keystore" keystorePass="changeit" с соответствующим однимом.

 Смежные вопросы

  • Нет связанных вопросов^_^