求助:Keystore篡改或密码错误问题已尝试多方案仍未解决
解决GlassFish 4.1 + MySQL Connector 5.1.45的Keystore连接错误
折腾了这么多方案还卡着这个keystore错误,确实闹心!结合你用的GlassFish 4.1、MySQL Connector 5.1.45环境,咱们从几个容易被忽略的细节入手排查:
1. 先确认keystore文件的真实密码
不要只盯着配置文件改,先直接验证keystore.jks本身的密码是否正确:
- 打开命令提示符,切换到keystore所在路径:
cd "C:\Program Files\glassfish-4.1\glassfish\domains\domain1\config" - 执行keytool命令检查:
keytool -list -keystore keystore.jks - 如果输入你设置的密码(比如
keystore或changeit)后,命令能正常列出证书信息,说明密码没问题;如果还是报错,那大概率是keystore文件损坏了,需要重新生成:- 先备份原
keystore.jks文件 - 执行生成命令,设置好新密码(比如还是用
keystore):keytool -genkey -alias s1as -keyalg RSA -keystore keystore.jks - 过程中所有选项直接回车默认即可,重点记好你设置的密码。
- 先备份原
2. 检查连接池的所有关联配置项
你已经设了ssl=false,但可能漏了其他和keystore绑定的配置:
- 打开NetBeans,找到GlassFish的
domain1服务器,进入Resources > JDBC > Connection Pools,选中你的MySQL连接池 - 切换到Additional Properties标签,逐一检查:
- 确保
useSSL的值是false,如果有sslMode项,改成DISABLED(MySQL 5.1.x的驱动有时候需要这个配合) - 找到
javax.net.ssl.keyStorePassword,确保它和你刚才验证/生成的keystore密码完全一致 - 删除任何残留的、和keystore相关的无效配置项(比如旧的
keystorePassword)
- 确保
3. 修正JDBC连接URL的格式
MySQL Connector 5.1.45的连接URL需要明确关闭SSL相关校验,避免隐式触发keystore检查:
- 你的连接URL应该改成类似这样:
加jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&allowPublicKeyRetrieval=trueallowPublicKeyRetrieval=true是为了避免驱动自动尝试SSL连接的额外校验。
4. 清理GlassFish缓存并重启
GlassFish经常会缓存旧配置,导致你的修改不生效:
- 先完全停止GlassFish服务器
- 删除
C:\Program Files\glassfish-4.1\glassfish\domains\domain1下的osgi-cache和generated文件夹里的所有内容 - 重新启动服务器,再测试连接池是否正常。
内容的提问来源于stack exchange,提问作者andrei preduna
相关产品推荐
相关产品推荐

