首页 > 解决方案 > 创建 SSL 证书服务器无法启动:com.ibm.crypto.tools.KeyTool 错误?

问题描述

我正在使用 grails 2.2。

我正在使用以下命令运行 grails 应用程序

run-app -noreloading -https -Dgrails.server.port.https=8443 -Dgrails.server.port.http=8080

我在启动应用程序时收到以下错误

"C:\Program Files\Zulu\zulu-7\bin\java.exe" -Dgrails.home=C:\Users\user\Desktop\grails-2.2.0 "-Dtools.jar=C:\Program Files\Zulu\zulu-7\lib\tools.jar" -Dgroovy.starter.conf=C:\Users\user\Desktop\grails-2.2.0/conf/groovy-starter.conf -Xmx768M -Xms768M -XX:MaxPermSize=256m -XX:PermSize=256m -Djline.WindowsTerminal.directConsole=false -Dbase.dir=C:\Users\user\IdeaProjects\RCRoadRaceWeb -Dfile.encoding=UTF-8 -classpath C:\Users\user\Desktop\grails-2.2.0\lib\org.codehaus.groovy\groovy-all\jars\groovy-all-2.0.5.jar;C:\Users\user\Desktop\grails-2.2.0\dist\grails-bootstrap-2.2.0.jar org.codehaus.groovy.grails.cli.support.GrailsStarter --main org.codehaus.groovy.grails.cli.GrailsScriptRunner --conf C:\Users\user\Desktop\grails-2.2.0/conf/groovy-starter.conf "run-app -noreloading -https -Dgrails.server.port.https=8443 -Dgrails.server.port.http=8080 -Duser.timezone=US/Mountain -plain-output"

|Loading Grails 2.2.0
|Configuring classpath
.
|Environment set to development
.................................
|Packaging Grails application
......
|Compiling 1 source files
...........
|Running Grails application
|Creating SSL Certificate...
Error |
Server failed to start: com.ibm.crypto.tools.KeyTool (Use --stacktrace to see the full trace)

Process finished with exit code 1

如果我在没有 https 标志的情况下正常运行它,那么它可以工作,但是当我使用 https 时,它在创建 ssl 证书时失败。

我正在使用 java 1.7。

我感谢任何有关如何克服此错误的帮助。谢谢您的帮助!

更新:

添加 --stacktrace 后,我收到以下错误

"C:\Program Files\Zulu\zulu-7\bin\java.exe" -Dgrails.home=C:\Users\user\Desktop\grails-2.2.0 "-Dtools.jar=C:\Program Files\Zulu\zulu-7\lib\tools.jar" -Dgroovy.starter.conf=C:\Users\user\Desktop\grails-2.2.0/conf/groovy-starter.conf -Xmx768M -Xms768M -XX:MaxPermSize=256m -XX:PermSize=256m -Djline.WindowsTerminal.directConsole=false -Dbase.dir=C:\Users\user\IdeaProjects\RCRoadRaceWeb -Dfile.encoding=UTF-8 -classpath C:\Users\user\Desktop\grails-2.2.0\lib\org.codehaus.groovy\groovy-all\jars\groovy-all-2.0.5.jar;C:\Users\user\Desktop\grails-2.2.0\dist\grails-bootstrap-2.2.0.jar org.codehaus.groovy.grails.cli.support.GrailsStarter --main org.codehaus.groovy.grails.cli.GrailsScriptRunner --conf C:\Users\user\Desktop\grails-2.2.0/conf/groovy-starter.conf "run-app -noreloading -https --stacktrace -Dgrails.server.port.https=8443 -Dgrails.server.port.http=8080 -Duser.timezone=US/Mountain -plain-output"

|Loading Grails 2.2.0
|Configuring classpath
.
|Environment set to development
.................................
|Packaging Grails application
......
|Compiling 1 source files
...........
|Running Grails application
|Creating SSL Certificate...
Error |
Server failed to start: com.ibm.crypto.tools.KeyTool (NOTE: Stack trace has been filtered. Use --verbose to see entire trace.)
java.lang.ClassNotFoundException: com.ibm.crypto.tools.KeyTool
    at java_lang_Class$forName.call(Unknown Source)
    at org.grails.plugins.tomcat.TomcatServer.getKeyToolClass(TomcatServer.groovy:186)
    at org.grails.plugins.tomcat.TomcatServer.this$2$getKeyToolClass(TomcatServer.groovy)
    at org.grails.plugins.tomcat.TomcatServer$this$2$getKeyToolClass.callCurrent(Unknown Source)
    at org.grails.plugins.tomcat.TomcatServer.createSSLCertificate(TomcatServer.groovy:167)
    at org.grails.plugins.tomcat.TomcatServer.startSecure(TomcatServer.groovy:140)
    at grails.web.container.EmbeddableServer$startSecure.call(Unknown Source)
    at _GrailsRun_groovy$_run_closure2.doCall(_GrailsRun_groovy:72)
    at org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:133)
    at org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:133)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy:185)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy)
    at org.codehaus.gant.GantBinding.withTargetEvent(GantBinding.groovy:90)
    at org.codehaus.gant.GantBinding.this$4$withTargetEvent(GantBinding.groovy)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy:185)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy)
    at org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:133)
    at RunApp$_run_closure1.doCall(RunApp.groovy:32)
    at org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:133)
    at org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:133)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy:185)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy)
    at org.codehaus.gant.GantBinding.withTargetEvent(GantBinding.groovy:90)
    at org.codehaus.gant.GantBinding.this$4$withTargetEvent(GantBinding.groovy)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy:185)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy)
    at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381)
    at gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415)
    at gant.Gant$_dispatch_closure7.doCall(Gant.groovy)
    at gant.Gant.withBuildListeners(Gant.groovy:427)
    at gant.Gant.this$2$withBuildListeners(Gant.groovy)
    at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)
    at gant.Gant.dispatch(Gant.groovy:415)
    at gant.Gant.this$2$dispatch(Gant.groovy)
    at gant.Gant.invokeMethod(Gant.groovy)
    at gant.Gant.executeTargets(Gant.groovy:591)
    at gant.Gant.executeTargets(Gant.groovy:590)

Error |
Server failed to start: com.ibm.crypto.tools.KeyTool

标签: javassl-certificategrails-2.2

解决方案


所以我首先按照此处的指导手动生成了 ssl 证书

https://community.pivotal.io/s/article/Generating-a-self-signed-SSL-certificate-using-the-Java-keytool-command?language=en_US

在那之后,正如这里所指出的那样

http://grails.1312388.n4.nabble.com/Specifying-the-SSL-certificate-in-Grails-2-x-td4629128.html

我在 BuildConfig.groovy 中粘贴了以下两行

grails.tomcat.keystorePath = "c:/Users/user/selfsigned.jks"
grails.tomcat.keystorePassword = "secret"

我对找到密钥库路径有点困惑

因为我使用了这个命令

keytool -genkey -keyalg RSA -alias tomcat -keystore selfsigned.jks -validity <days> -keysize 2048

我在 C:\Users\user>

所以我只是在那里做了 dir 并注意到 selfsigned.jks

所以我意识到这条路是

c:/Users/user/selfsigned.jks

在此更改后,应用程序运行愉快。似乎如果使用 buildconfig 配置了自签名证书,那么它将不会创建会失败的 ssl 证书。

谢谢你;从

http://grails.1312388.n4.nabble.com/Specifying-the-SSL-certificate-in-Grails-2-x-td4629128.html

解决方案是你的。


推荐阅读