为什么即使我们提供空密码,JKS加载也能正常工作?

时间:2017-02-21 08:52:54

标签: java security ssl keystore jks

我有一个使用密码生成的JKS文件。我有一个使用keystore连接到网址的java代码。现在,当我加载密钥库时,我错误地将密码作为null传递。令我惊讶的是,这种联系仍然存在。

KeyStore store = KeyStore.getInstance("JKS");
store.load(stream, null);

这种行为对我来说很可疑。对此有解释吗?

修改

如果此行为符合预期,那么为什么在通过keytool创建密钥库时需要密码?

2 个答案:

答案 0 :(得分:3)

如果您不提供密码:

  1. 密钥库在打开时未经过完整性检查。
  2. 您无法访问任何私钥条目。
  3. 对于用作信任库{ "title": "Free Music Archive - Albums", "message": "", "errors": [], "total": "11259", "total_pages": 2252, "page": 1, "limit": "5", "dataset": [ { "album_id": "7596", "album_title": "Album 1", "images": [ { "image_id": "1", "user_id": null } ] } ] } ,即仅包含受信任证书,这是正常用法。

      

    如果此行为符合预期,那么为什么在通过keytool创建密钥库时需要密码?

    这样你就可以在开场时提供一个,以便得到上面(1)或(2)的行为。

答案 1 :(得分:-1)

嗯,我认为您传递的密码短语是为了确保密钥库本身的完整性(在更改内容本身时)。但是,如果没有提供密码,则仍然可以读取内容(密钥/证书) - 这正是您所遇到的。

为了便于说明,您还可以通过运行以下命令来查看密钥库的内容:keytool -list -keystore <keystore> - 这并不意味着将密码短语传递给密钥库本身。

您还可以在KeyStore对象上阅读与load()相关的更多内容:http://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html#load(java.io.InputStream,%20char[])

  

stream - 加载密钥库的输入流,或者为null

     

password - 用于检查密钥库完整性的密码,用于解锁密钥库的密码或null