运行Grails CLI报有效证书路径缺失错误如何解决
故障根因
你遇到的核心报错和PATH配置无关:
- 开头的
OpenJDK Server VM warning: ignoring option UseSplitVerifier; support was removed in 8.0是警告,JDK8已经移除了这个老版本的JVM参数,不影响Grails正常运行,不需要单独处理。 - 触发CLI启动失败的
unable to find valid certification path to requested target是SSL证书信任问题:Grails启动时需要拉取远程仓库的依赖,当前运行Grails的JDK内置信任库(cacerts)没有对应仓库的SSL根证书,导致HTTPS连接被拦截。
修复操作
按顺序操作即可:
- 确认Grails实际调用的JDK路径
新开命令行执行grails -version,从输出里找到Java Home对应的路径,后续所有证书操作都针对这个JDK,不要修改系统里其他版本JDK的配置,否则不会生效。 - 导出对应仓库的SSL证书
浏览器打开你Grails配置的依赖仓库地址(默认是Grails官方公共仓库,如果是公司内网仓库就打开内网仓库地址),点击地址栏左侧的锁形图标,在证书详情里选择导出根证书,保存为Base64编码的.cer文件,比如存成grails-cert.cer放到桌面。 - 导入证书到JDK信任库
以管理员身份打开命令提示符,执行如下命令,注意替换成你自己的JDK路径和证书存放路径:
执行后会提示输入信任库密码,JDK默认的cacerts密码是keytool -import -alias grails-repo -keystore "你的JDK路径\jre\lib\security\cacerts" -file "C:\Users\nxf82701\Desktop\grails-cert.cer"changeit,输入时命令行不会显示输入内容,输完直接回车,后续弹出是否信任证书的提示时输入yes回车,看到「证书已添加到密钥库」的提示就完成导入。 - 特殊场景处理
如果你是在公司内网环境,网络网关做了SSL流量劫持替换,需要找运维索要公司网关的根证书,按照上面的导入步骤把公司根证书也导入到同一个cacerts文件里即可。
临时排障方案(不推荐长期使用)
如果需要快速验证功能,可以临时关闭SSL校验,找到Grails安装目录下bin/grails.bat文件,在脚本里的JAVA_OPTS配置项末尾追加-Djavax.net.ssl.trustAll=true -Dcom.sun.net.ssl.checkRevocation=false,保存后重新打开命令行即可执行Grails命令。该方案会跳过所有HTTPS证书校验,存在中间人攻击风险,仅用于临时排障,不要在生产环境使用。
内容的提问来源于stack exchange,提问作者Thomas Michael Plantin
相关产品推荐
相关产品推荐

