运行 Grails 3 独立 jar/war 带 HTTPS

Run Grails 3 standalone jar/war with HTTPS

我可以 运行 我的 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)。

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

java -jar PATH_TO_APP\myapp-0.1.war

http://localhost:8080.

上正确应用 运行s

问题

我不知道如何 运行 这个 jar-https 参数,所以它可以在 https://localhost:8444 上访问 - 与 grails run-app -https .我可以在 HTTPS 模式下使 运行nable jar/war 运行 吗?或者也许我可以将我的应用程序默认为 运行 和 -https

我尝试过的:

附加信息

我已将此应用程序配置为使用证书和自定义端口,但我认为这一点并不重要:

-> 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"
}

规格:


编辑:我尝试使用@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.

我将 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: PKCS12 后:Alias name [tomcat] does not identify a key entry.

如果您要使用这些选项生成密钥:

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

申请。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/container 由 spring-boot 提供,因此请查看他们的文档以了解更多信息 info/options。

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