Java 读取CAcerts的内容需要密码-什么时候对默认行为进行了此更改

Java 读取CAcerts的内容需要密码-什么时候对默认行为进行了此更改,java,java-8,Java,Java 8,我们使用Java8在AWS实例上运行应用程序。应用程序被配置为在CAcerts中查找受信任的证书。编写应用程序时,它仅使用CAcerts的路径/名称。未使用信任库类型或密码对其进行配置 直到几个月前它停止工作,一切都很好。我们当时发现必须指定类型和密码才能读取CAcerts。我明白这一直是默认的位置,但看起来不是 回到2010年,你不需要密码来列出CAcerts的内容。堆栈溢出链接 然后在2018年,您似乎必须提供密码才能列出内容。堆栈溢出链接 在这两次约会之间的某个地方发生了变化。Java8的

我们使用Java8在AWS实例上运行应用程序。应用程序被配置为在CAcerts中查找受信任的证书。编写应用程序时,它仅使用CAcerts的路径/名称。未使用信任库类型或密码对其进行配置

直到几个月前它停止工作,一切都很好。我们当时发现必须指定类型和密码才能读取CAcerts。我明白这一直是默认的位置,但看起来不是

回到2010年,你不需要密码来列出CAcerts的内容。堆栈溢出链接

然后在2018年,您似乎必须提供密码才能列出内容。堆栈溢出链接

在这两次约会之间的某个地方发生了变化。Java8的relase注释确实告诉了我任何事情,所以有人能告诉我什么时候发生了这种变化吗

谢谢

埃迪


您确定该文件是用j8创建的吗?j9 up默认创建PKCS12,它需要密码才能读取证书,而JKS(j9下面的默认值)则不需要密码——如果程序是这样编码的,那么哪个keytool是你的应用程序,我们不知道。但是,即使文件是PKCS12,从8u60到8的更新也应该能够使用默认类型读取它,除非有人更改了java.security文件(或keystore.type.compat安全属性)。检查文件的前2个字节:它们是
feed
(JKS)还是
3082
(PKCS12)?文件是何时/如何修改的?@dave_thompson_085谢谢你。所以我看了一个基本的t2.0版本的AWS AMI,并且能够重现这个问题。我运行了“yum install java”更新到最新版本。cacert信任库是作为构建的一部分提供的,我们从不更改。openjdk版本“1.8.0ĉ”,openjdk 64位服务器VM(构建25.265-b01,混合模式)#keytool-list-keystore/etc/pki/java/cacerts>输入密钥库密码:#changeit>keystore类型:jks>keystoreprovider:SUN。所有EC2实例都从大约60000个AMI中的一个运行,因此没有多大帮助。由于我不会为此付费,快速启动向导在免费层上只有40个,只有少数使用
yum
,所以我尝试了第一个——Amazon Linux 2(HVM),名称:amzn2-ami-HVM-2.0.20200917.0-x86_64-gp2 id:ami-03657b56516ab7912
sudo-yum-install-java
在该AMI上获得11个corretto,并且
。。。java-1.8.0
从不同的ca-certificates包中获取
java-1.8.0-openjdk.x86_641.8.0.265.b01-1.amzn2.0.1
,它使用
/etc/pki/ca-trust/extracted/java/cacerts
。noarch 2019.2.32-76.amzn2.0.3`这是一个JKS文件。。。。。。java中的
keytool
确实可以列出cacerts文件中的137个证书,而无需密码。这不符合你的要求。8u265 keytool也没有显示JKS类型;正如我所说,8u60 up有一个兼容性特性,程序(keytool)使用JKS的API,但它仍然可以读取JKS或PKCS12,后者只能使用密码。如果没有您实际使用的文件的详细信息,我仍然不相信没有密码就无法读取任何JKS文件。您好@dave_thompson_085,感谢您坚持使用此文件。我一定在做一些很基本的事情。看到这里的图片:底线是,我得到提示,一旦我输入密码,它告诉我它是一个JKS格式!!!我做错了什么?你确定文件是用j8创建的吗?j9 up默认创建PKCS12,它需要密码才能读取证书,而JKS(j9下面的默认值)则不需要密码——如果程序是这样编码的,那么哪个keytool是你的应用程序,我们不知道。但是,即使文件是PKCS12,从8u60到8的更新也应该能够使用默认类型读取它,除非有人更改了java.security文件(或keystore.type.compat安全属性)。检查文件的前2个字节:它们是
feed
(JKS)还是
3082
(PKCS12)?文件是何时/如何修改的?@dave_thompson_085谢谢你。所以我看了一个基本的t2.0版本的AWS AMI,并且能够重现这个问题。我运行了“yum install java”更新到最新版本。cacert信任库是作为构建的一部分提供的,我们从不更改。openjdk版本“1.8.0ĉ”,openjdk 64位服务器VM(构建25.265-b01,混合模式)#keytool-list-keystore/etc/pki/java/cacerts>输入密钥库密码:#changeit>keystore类型:jks>keystoreprovider:SUN。所有EC2实例都从大约60000个AMI中的一个运行,因此没有多大帮助。由于我不会为此付费,快速启动向导在免费层上只有40个,只有少数使用
yum
,所以我尝试了第一个——Amazon Linux 2(HVM),名称:amzn2-ami-HVM-2.0.20200917.0-x86_64-gp2 id:ami-03657b56516ab7912
sudo-yum-install-java
在该AMI上获得11个corretto,并且
。。。java-1.8.0
从不同的ca-certificates包中获取
java-1.8.0-openjdk.x86_641.8.0.265.b01-1.amzn2.0.1
,它使用
/etc/pki/ca-trust/extracted/java/cacerts
。noarch 2019.2.32-76.amzn2.0.3`这是一个JKS文件。。。。。。java中的
keytool
确实可以列出cacerts文件中的137个证书,而无需密码。这不符合你的要求。8u265 keytool也没有显示JKS类型;正如我所说,8u60 up有一个兼容性特性,程序(keytool)使用JKS的API,但它仍然可以读取JKS或PKCS12,后者只能使用密码。如果没有您实际使用的文件的详细信息,我仍然不相信没有密码就无法读取任何JKS文件。您好@dave_thompson_085,感谢您坚持使用此文件。我一定在做一些很基本的事情。看到这里的图片:底线是,我得到提示,一旦我输入密码,它告诉我它是一个JKS格式!!!我做错了什么?