使用HTTPS运行Grails 3独立的jar/war



我可以使用-https参数使用HTTPS运行Grails 3.3.8应用程序(https://docs.grails.org/latest/ref/Command%20Line/run-app.html(.

grails run-app -https

应用程序可在上访问https://localhost:8444(我使用自定义端口,8443是默认端口(。

我使用grails package命令创建了一个可运行的war文件,如中所述https://docs.grails.org/latest/guide/deployment.html.执行后

java -jar PATH_TO_APPmyapp-0.1.war

应用程序在上正确运行http://localhost:8080.

问题

我不知道如何用-https参数运行这个jar,所以它可以在https://localhost:8444-与grails run-app -https一样。我可以让可运行的jar/war在HTTPS模式下运行吗?或者我可以默认我的应用程序使用-https运行?

我尝试过的:

  • 使用--Dserver.port.https=8444参数执行jar-无效
  • 执行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
  • 圣杯: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上使用Linux的Windows子系统(

/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

我将keystore.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

在注释掉key-store-type: PKCS12:Alias name [tomcat] does not identify a key entry之后,应用程序不会开始抛出错误DerInputStream.getLength(): lengthTag=109, too big或-。

如果您要使用以下选项生成密钥:

keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365

application.yml/groovy:

server:
port: 8444
ssl:
key-store: keystore.p12
key-store-password: whatYouSetWhenGeneratingKeytool
keyStoreType: PKCS12
keyAlias: tomcat

你的应用程序将以ssl开始——尽管输出会显示http,但实际上是https:

$ ./gradlew assemble
$ java -jar build/libs/ssltest-0.1.jar
Grails application running at http://localhost:8444 in environment: production

使用Grails 3.3.8进行测试。

嵌入式tomcat/容器是由spring-boot提供的,所以请查看他们的文档以了解更多信息/选项。

https://docs.spring.io/spring-boot/docs/1.5.17.RELEASE/reference/html/howto-embedded-servlet-containers.html

最新更新