Я нахожусь в процессе перемещения моего приложения с HTTP на HTTPS и, похоже, столкнулся с проблемой.
Вот что я сделал на основе этих инструкций :
- Укажите имя хоста для компьютера, на котором размещен сервер. Т.е .: localhost для этих инструкций
- Определите тип сервера jBoss (все, по умолчанию, производство). Т.е.: экотрак по этим инструкциям
- jBoss рекомендует использовать тот же файл, что и для хранилища ключей и доверенных лиц. Это будет server.keystore. При первичной установке не должно быть хранилища server.keystore в папкеdefault / conf. Если он у вас есть, вы должны решить, следует ли его удалить (использовать эти инструкции) или адаптировать инструкции в соответствии с вашей ситуацией.
- Создание хранилища ключей и закрытого ключа:
- Откройте командную строку или оболочку и перейдите в папку по умолчанию / conf.
- keytool -genkey -alias jbosskey -keypass changeit -keyalg RSA -keystore server.keystore
- Ответьте на запросы. Используйте myHostname при запросе имени / фамилии. Это очень важно.
- server.keystore генерируется.
- keytool -list -keystore server.keystore
- Вы должны увидеть PrivateKeyEntry с именем jbosskey в списке.
- Генерация и хранение сертификата.
- keytool -export -alias jbosskey -keypass changeit -file server.crt -keystore server.keystore
- server.crt генерируется.
- keytool -import -alias jbosscert -keypass changeit -file server.crt -keystore server.keystore
- Вы получаете предупреждение, что оно уже существует в хранилище ключей. Игнорируй это. Это потому, что Java ожидает отдельное хранилище ключей и файлы trustore, а мы используем только один.
- keytool -list -keystore server.keystore
- Вы должны увидеть в списке TrustedCertEntry с именем jbosscert.
В моем server.xml у меня есть следующее:
<!-- SSL/TLS Connector configuration using the admin devl guide keystore-->
<Connector protocol="HTTP/1.1" SSLEnabled="true"
port="8443" address="${jboss.bind.address}"
scheme="https" secure="true" clientAuth="false"
keystoreFile="C:/dev/server/jboss-5.1.0.GA/server/ecotrak/conf/server.keystore"
keystorePass="password" sslProtocol = "TLS" keyAlias="jbosskey" />
Когда я запускаю сервер, у меня есть следующее:
call %JBOSS_HOME%\bin\run.bat -c default -b 0.0.0.0 -Djavax.net.ssl.trustStore=C:/dev/server/jboss-5.1.0.GA/server/ecotrak/conf/server.keystore
Вот что я получаю в своем лог-файле:
00:09:03,110 INFO [AprLifecycleListener] The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\dev\jdk\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\dev\jdk\jre\bin;native
00:09:03,197 INFO [Http11Protocol] Initializing Coyote HTTP/1.1 on http-localhost%2F127.0.0.1-8080
00:09:03,214 INFO [AjpProtocol] Initializing Coyote AJP/1.3 on ajp-localhost%2F127.0.0.1-8009
00:09:03,261 ERROR [Http11Protocol] Error initializing endpoint
java.io.IOException: Cannot recover key
at org.apache.tomcat.util.net.jsse.JSSESocketFactory.init(JSSESocketFactory.java:456)
at org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSocket(JSSESocketFactory.java:139)
Еще один раздел журнала
00:09:03,265 ERROR [AbstractKernelController] Error installing to Start: name=WebServer state=Create
LifecycleException: Protocol handler initialization failed: java.io.IOException: Cannot recover key
at org.apache.catalina.connector.Connector.initialize(Connector.java:1031)
at org.apache.catalina.core.StandardService.initialize(StandardService.java:683)
РАЗМЕЩЕНИЯ В ОШИБКАХ:
Deployment "WebServer" is in error due to the following reason(s): LifecycleException: Protocol handler initialization failed: java.io.IOException: Cannot recover key
Deployment "jboss.web:service=WebServer" is in error due to the following reason(s): ** NOT FOUND Depends on 'jboss.web:service=WebServer' **
Какой-нибудь идеал относительно того, что здесь происходит?
Update
Я нашел свою ошибку - я перепутал пароли между хранилищем ключей и сертификатом. После того, как это было исправлено, я теперь могу запустить сайт под HTTPS