2015-04-16 3 views
1

Я использую tomcat 8 и должен сделать его SSL, поэтому я использую openSSL для создания самоподписанного сертификата и настроил его в файле server.xml tomcat. Но я получаю следующее исключениеСертификат OpenSSL дает «Недопустимый формат хранилища ключей» в tomcat 8

INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-7443"] 
16-Apr-2015 09:50:56.647 SEVERE [main] org.apache.coyote.AbstractProtocol.init Failed to initialize end point associated with ProtocolHandler ["http-nio-7443"] 
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:1433) 
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getStore(JSSESocketFactory.java:424) 
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeystore(JSSESocketFactory.java:323) 
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeyManagers(JSSESocketFactory.java:581) 
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeyManagers(JSSESocketFactory.java:521) 
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:363) 
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:730) 
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:457) 
    at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:120) 
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:960) 
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102) 
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:567) 
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102) 
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:851) 
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102) 
    at org.apache.catalina.startup.Catalina.load(Catalina.java:576) 
    at org.apache.catalina.startup.Catalina.load(Catalina.java:599) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    Write failed: Broken pipegMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43 
+0

Это ** не * дает 'недействительному ключ'. Он дает «недопустимый формат хранилища ключей». Не будьте неряшливы. – EJP

ответ

3

Этот след указывает на недопустимый формат на вашем хранилище ключей.

Проверьте это:

keytool -list -v -keystore keystore.jks 

сертификаты, перечисленные в вашем хранилище?

Если вы сгенерировали его с помощью OpenSSL, возможно, вы генерируете pkcs12, и если вы импортируете это и используете Connector на Tomcat без указания формата, в соответствии со значением keyStoreType по умолчанию он устанавливается как «JKS».

https://tomcat.apache.org/tomcat-8.0-doc/config/http.html

keystoreType Тип файла хранилища ключей, которые будут использоваться для сервера сертификата. Если не указано, значением по умолчанию является «JKS».

Использование Keytool:

Я предлагаю: попытаться создать хранилище ключей с Keytool (для меня это проще): https://www.sslshopper.com/article-most-common-java-keytool-keystore-commands.html?jn45301e6e=2

Генерация хранилищу и самостоятельно подписанный сертификат:

keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048 

Использование PKCS12

Или, если вы pefer, вы можете также использовать PKCS12 (если это ваш случай) с Tomcat:

Отредактируйте JAVA_HOME// Библиотека файлов/безопасность/java.security JRE и изменить тип хранилищу по умолчанию:

# Default keystore type. 
keystore.type=pkcs12 

Затем нужно настроить коннектор с чем-то похожим на:

<!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 --> 
<Connector port="8443" 
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
    enableLookups="false" disableUploadTimeout="true" 
    acceptCount="100" debug="0" scheme="https" secure="true" 
    clientAuth="false" sslProtocol="TLS" 
    keystoreType="PKCS12" 
    keystoreFile="yourKey.p12" 
    keystorePass="endeca" 
    truststoreType="PKCS12" 
    truststoreFile="yourKey.p12" 
    truststorePass="pass" /> 
+0

Использование openSSL и команды, используемой для создания сертификата: openssl req -x509 -newkey rsa: 2048 -keyout key.pem -out cert.pem -days XXX – Krishna

+2

эта команда не генерирует хранилище ключей, при этом вы получаете сертификат. pem и key.pem, и вы должны создать хранилище ключей – exoddus