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

时间:2018-10-25 22:45:24

标签: java gradle grails https

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

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上使用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

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

1 个答案:

答案 0 :(得分:0)

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

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的测试。

spring-boot提供了嵌入式的tomcat /容器,因此请查看其文档以获取更多信息/选项。

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