使用SQL Developer连接数据库报ValidatorException、Vendor code 17002如何解决
问题原因
该报错的核心是SQL Developer默认使用自带的独立JDK运行,其内置的信任库中没有目标数据库的SSL服务端证书;你本地使用的Python、Java程序调用的是系统环境配置的运行时/JDK,对应的信任库中已经提前导入了数据库证书,因此会出现相同配置连接结果不一致的情况。
报错中文翻译
执行请求的操作时遇到错误:
IO错误:IO错误 sun.security.validator.ValidatorException: PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException: 无法找到指向请求目标的有效证书路径,连接耗时1961ms,认证耗时0ms。
厂商错误码 17002
解决方案
按需选择以下两种方案处理即可:
临时绕过证书验证(仅测试用,不建议生产环境使用)
- 打开SQL Developer的连接配置界面,找到「高级」选项卡
- 在「自定义JDBC URL」的原有URL末尾追加参数
?oracle.net.ssl_server_dn_match=false - 也可以在连接属性栏手动新增属性
oracle.net.ssl_server_dn_match,值设为false - 保存配置后重新尝试连接即可
正式导入证书到SQL Developer信任库(生产环境推荐)
- 第一步:导出数据库服务端的SSL证书,可通过openssl命令导出:
openssl s_client -connect 数据库地址:端口 < /dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' > db.crt,也可以通过浏览器访问数据库SSL端口导出证书 - 第二步:找到SQL Developer自带JDK的信任库路径,Windows默认路径为
C:\Program Files\Oracle\SQL Developer\jdk\jre\lib\security\cacerts,Mac默认路径为/Applications/SQLDeveloper.app/Contents/Resources/sqldeveloper/jdk/jre/lib/security/cacerts - 第三步:用keytool命令将证书导入到对应信任库:
keytool -import -alias 自定义证书别名 -file 证书文件db.crt的本地路径 -keystore 上一步找到的cacerts文件路径,默认信任库密码为changeit - 第四步:重启SQL Developer后重新连接即可
内容的提问来源于stack exchange,提问作者Akash zawar
相关产品推荐
相关产品推荐

