我有一个使用密码生成的JKS
文件。我有一个使用keystore
连接到网址的java代码。现在,当我加载密钥库时,我错误地将密码作为null
传递。令我惊讶的是,这种联系仍然存在。
KeyStore store = KeyStore.getInstance("JKS");
store.load(stream, null);
这种行为对我来说很可疑。对此有解释吗?
修改
如果此行为符合预期,那么为什么在通过keytool创建密钥库时需要密码?
答案 0 :(得分: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