Я могу запустить свое приложение Grails 3.3.8 с HTTPS, используя аргумент -https
(https://docs.grails.org/latest/ref/Command%20Line/run-app.html).
grails run-app -https
Приложение доступно на https://localhost:8444 (Я использую пользовательский порт, по умолчанию 8443.)
Я создал исполняемый файл war
, используя команду grails package
, как указано в https://docs.grails.org/latest/guide/deployment.html. После выполнения
java -jar PATH_TO_APP\myapp-0.1.war
приложение работает правильно на http://localhost:8080.
Проблема
Я не могу понять, как запустить этот jar
с аргументом -https
, так что этодоступно для https://localhost:8444 - как и для grails run-app -https
. Могу ли я сделать работоспособный jar/war
запущенным в режиме HTTPS? Или, может быть, я могу по умолчанию запустить приложение с -https
?
Что у меняпробовал:
- Выполнение
jar
с параметром --Dserver.port.https=8444
- безрезультатно. - Выполнение
grails package -https
- я не знаю, чего я ожидал. - Плагин https://grails.org/plugin/standalone,, который, похоже, может помочь - к сожалению, недоступен для Grails 3.
Дополнительная информация
Я настроил это приложениеМожно использовать сертификат и пользовательский порт, но я не думаю, что это имеет значение:
-> build.gradle
.
bootRun {
jvmArgs("-Dspring.output.ansi.enabled=always")
addResources = true
String springProfilesActive = "spring.profiles.active"
systemProperty springProfilesActive, System.getProperty(springProfilesActive)
systemProperty "server.port", "8444"
systemProperty "server.ssl.enabled", "true"
systemProperty "server.ssl.key-store", System.getProperty("user.home") + "/certificates/cert.p12"
systemProperty "server.ssl.key-store-password", "secret"
systemProperty "server.ssl.key-password", "secret"
}
Спецификация:
- Система: Windows 10
- JDK: 1.8.0_191-b12
- Grails: 3.3.8
Редактировать: я пытался использовать @erichelgesonответ.
Я повторно экспортировал свой сертификат с псевдонимом tomcat
:
openssl pkcs12 -export -out ia.p12 -inkey ia.key -in ia.crt -chain -CAfile ca.crt -name tomcat
,
и импортировал его с помощью команды keystore
(я нахожусь наWindows, использующая подсистему Windows для Linux)
/mnt/c/Program\ Files/Java/jdk1.8.0_191/bin/keytool.exe -importkeystore -srckeystore cert.p12 -srcstoretype pkcs12 -srcalias tomcat -destkeystore keystore.jks -deststoretype jks -deststorepass secret -destalias tomcat
,
и затем перенесла ее в PKCS12 после предупреждения о хранилище ключей
/mnt/c/Program\ Files/Java/jdk1.8.0_191/bin/keytool.exe -importkeystore -srckeystore keystore.jks -destkeystore keystore.jks -deststoretype pkcs12
.
Ikeystore.jks
в корне папки приложения (я также пробовал /src/main/resources
) и изменил мой application.yml
файл, добавив
server:
port: 8444
ssl:
key-password: secret
key-store-password: secret
key-store: keystore.jks
key-store-type: PKCS12
key-alias: tomcat
Приложение не начнет выдавать ошибку DerInputStream.getLength(): lengthTag=109, too big
или - после комментирования key-store-type: PKCS12
: Alias name [tomcat] does not identify a key entry
.