java - 创建 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
解决方案
所以我首先按照此处的指导手动生成了 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
解决方案是你的。
推荐阅读
- quarkus - Quarkus 热替换不适用于构造函数中的代码
- machine-learning - FastAI 关于使用 TextList 加载数据的问题
- java - 它在正常模式下退出 while 但不在调试中
- apache-kafka - 从 spring-cloud-stream 访问 kafka producer factory
- php - CakePHP 4 csrfToken cookie未在第一页加载时设置
- c++ - 在 C++ 中查找字符并执行与该字符相关的命令
- python - 如何根据 Python 中的条件添加或删除新行?
- ag-grid - 如何使用 Ag Grid 在单元格上设置默认值
- c - C 编程:从文件中读取数据、动态分配内存、将内容放入结构数组
- grafana - 在 Grafana 中显示全局变量值