运行 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
上正确应用 运行s
问题
我不知道如何 运行 这个 jar
与 -https
参数,所以它可以在 https://localhost:8444 上访问 - 与 grails run-app -https
.我可以在 HTTPS 模式下使 运行nable jar/war
运行 吗?或者也许我可以将我的应用程序默认为 运行 和 -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"
}
规格:
- 系统:Windows10
- 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
.
我将 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。
我可以 运行 我的 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
问题
我不知道如何 运行 这个 jar
与 -https
参数,所以它可以在 https://localhost:8444 上访问 - 与 grails run-app -https
.我可以在 HTTPS 模式下使 运行nable jar/war
运行 吗?或者也许我可以将我的应用程序默认为 运行 和 -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"
}
规格:
- 系统:Windows10
- 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
.
我将 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。