eclipse Java:trustwords参数必须为非空(openjdk)

jm2pwxwz  于 2023-10-18  发布在  Eclipse
关注(0)|答案(1)|浏览(177)

我想通过HttpURLConnection连接到一个站点。首先,我偶然遇到了 javax.net.ssl.SSLHandshakeException,因为我忘记了通过 keytool -importcert 为./lib/security下的站点添加证书。在那之后,连接可以轻松建立。
然而,今天它不再工作了,没有改变代码或其他任何东西。似乎抛出了以下异常:

javax.net.ssl.SSLException: Unexpected error: java.security.InvalidAlgorithmParameterException: the 
 trustAnchors parameter must be non-empty

尽管网上有很多可能的解决方案,但没有一个能让我摆脱这个错误。
也许在eclipse中需要做一些设置?

wpx232ag

wpx232ag1#

更新!

我所有的JDK和JRE都有到/etc/ssl/certs/java/cacerts的错误符号链接,这似乎是根本原因。在我的系统上,JDK安装到/usr/opt中,但安装程序致命地期望能够通过错误的相对路径访问符号链接:

# ll /usr/opt/openjdk-*/lib/security/cacerts
lrwxrwxrwx 1 root root 27 Sep 20 23:48 /usr/opt/openjdk-bin-11.0.18_p10/lib/security/cacerts -> /etc/ssl/certs/java/cacerts
lrwxrwxrwx 1 root root 27 Sep 20 23:48 /usr/opt/openjdk-bin-11/lib/security/cacerts -> ../../../../etc/ssl/certs/java/cacerts
lrwxrwxrwx 1 root root 38 Mar  8  2023 /usr/opt/openjdk-bin-17.0.6_p10/lib/security/cacerts -> ../../../../etc/ssl/certs/java/cacerts
lrwxrwxrwx 1 root root 38 Mar  8  2023 /usr/opt/openjdk-bin-17/lib/security/cacerts -> ../../../../etc/ssl/certs/java/cacerts
lrwxrwxrwx 1 root root 38 Mar  6  2023 /usr/opt/openjdk-jre-bin-11.0.12_p7/lib/security/cacerts -> ../../../../etc/ssl/certs/java/cacerts
lrwxrwxrwx 1 root root 38 Mar  6  2023 /usr/opt/openjdk-jre-bin-11/lib/security/cacerts -> ../../../../etc/ssl/certs/java/cacerts
lrwxrwxrwx 1 root root 38 Mar  6  2023 /usr/opt/openjdk-jre-bin-8.362_p09/lib/security/cacerts -> ../../../../etc/ssl/certs/java/cacerts
lrwxrwxrwx 1 root root 38 Mar  6  2023 /usr/opt/openjdk-jre-bin-8/lib/security/cacerts -> ../../../../etc/ssl/certs/java/cacerts

但是您需要弄清楚JVM安装在哪里。在我的Debian笔记本电脑上,它们是/usr/lib/jvm
因此,为了解决这个问题,而不必重新安装,我建议如下。
1.首先要确定这是真正的原因。做一个长的列表,并确保您看到的是断开的符号链接。(如果你有alias ls='ls --color=auto',它们会令人不安地 Flink 红色)

ls -alF /usr/opt/openjdk-*/lib/security/cacerts
# or
ls -alF /usr/lib/jvm/*/lib/security/cacerts

如果您看到这些标记一直 Flink 到几天结束,那么您可以首先以普通用户的身份进行测试(您应该获得权限拒绝),然后以root身份运行它。将路径和模式更改为与系统匹配的模式

for f in $(ls /usr/opt/openjdk-*/lib/security/cacerts); do
    [[ -e $f ]] || ln -sf /etc/ssl/certs/java/cacerts $f;
done

原始答案

我正在运行Gentoo Linux,我终于解决了这个问题.等待它...重新安装dev-java/icedtea!我觉得这是一个超级蹩脚的答案,但这是唯一有效的方法。很多人都有这个问题,我希望这能帮助到一些人。我记得几年前在OpenJDK或icedtea项目中阅读过一个关于这个问题的bug报告,但我再也找不到了。我假设重新安装工作,因为我不知何故有旧的jar与错误和新版本的修复,但我不能100%肯定。
具体来说,我跑了:

sudo emerge -1v dev-java/icedtea
eselect java-vm set user icedtea-8
ANDROID_HOME=/home/daniel/.android-sdk-update-manager /home/daniel/.android-sdk-update-manager/tools/bin/sdkmanager --list

如果你使用Ubuntu,Debian等。我假设你会想要apt install --reinstall openjdk-8-jre或者你的Java 8包的名字。

相关问题