我有一个全新安装的ubuntu 18.04。我的构建(例如Maven和Gradle)访问存储库https时遇到问题,它显示的消息是:
java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
当我尝试使用以下命令从我的密钥库访问证书时:
keytool -list -keystore /etc/ssl/certs/java/cacerts
我收到密码提示,这不是问题,但如果我只是按Enter而不输入密码它没有显示任何条目。
如果我输入密码,所有证书都会正常显示。我必须做的是在我的所有java应用程序中添加以下系统道具:
javax.net.ssl.trustStorePassword=changeit
然后一切正常。我做错了什么?
编辑:
这是cacerts现在的权限:-rw-r--r-- 1 root root 167K jun 8 11:21 /etc/ssl/certs/java/cacerts
所以每个人都应该阅读。如果我尝试使用没有密码的列表: ```keytool -list -keystore / etc / ssl / certs / java / cacerts✔30810:27:15 输入密钥库密码:
*************警告警告警告***************** *存储在密钥库中的信息的完整性* *尚未经过验证!为了验证其完整性,* *您必须提供密钥库密码。 * *************警告警告警告*****************
密钥库类型:JKS 密钥库提供商:SUN
您的密钥库包含0个条目
用密码:keytool -list -keystore / etc / ssl / certs / java / cacerts✔31010:36:33
输入密钥库密码:
密钥库类型:JKS
密钥库提供商:SUN
您的密钥库包含134个条目
答案 0 :(得分:0)
读取应该是无密码的,只有写操作才需要密码
您误解了密码的用途。密码(实际上)是密钥库的解密密钥。它可以防止未经授权的读取,无论文件系统权限如何。
如果您希望/需要允许读取而不使用密码但是防止写入,则需要使用文件系统权限。以下Q& A说明如何删除默认密码:
这里解释了为什么控制写入(而不是读取)的密码无效。
假设可信密钥库在没有密码的情况下可读。然后,用户可以执行以下操作:
这可以使用自定义Java应用程序或(可能)标准keytool
实用程序和mv
命令来完成。
阻止此操作的唯一方法是阻止应用程序(或用户)使用新的通过文件系统权限替换旧的密钥库。如果你不能这样做(例如因为用户具有管理员级访问权限),那么没有没有安全漏洞的解决方案。