我使用Windows和Linux计算机通过Java Keytool创建Java Keystore(JKS)。当我运行keytool命令时,请提及以下内容:
keytool -genkey -alias TESTSSL -dname“ cn = Test.com,ou = testlab,o = myorg,c = UK” -keyalg“ RSA” -keysize 2048 -keystore TESTSSL.private.jks -validity 10 -storepass XXXXXXX
提示输入密钥库密码和密钥密码。
查询的是,我想知道两个密码的存储位置和形式。它存储在密钥库文件中还是OS的其他位置(如果是这种情况,请知道确切的位置)。
任何与此高度赞赏的信息。
答案 0 :(得分:0)
密钥密码和密钥库密码存储在密钥库本身中。它是独立的。这样,密钥库是可移植的,并且可以发送给其他可以打开密钥库的用户(前提是他们知道密钥[store]密码)。
答案 1 :(得分:0)
请注意,假设您在运行keytool
时此文件不存在,则实际上是在创建默认格式的密钥库;通过Java 8,默认值为JKS,但从9开始,默认值为PKCS12。 (为文件something.jks
命名并不能控制格式,只要为文件something.lollipop
命名就可以使它看起来更甜美。)
如果您按要求在命令行上指定-storepass whatever
,则不应提示输入密钥库密码-至少不要在该操作上输入密码;如果再次运行keytool
以(重新)使用同一文件,除非您在 that 命令行中再次指定它,否则将提示那个。同样,如果您在命令行上指定-keypass whatever
,则根据操作需要在需要时不提示输入密钥密码。
对于JKS JCEKS和PKCS12,根本不存储密码。这样做绝对是不安全的。取而代之的是,密码加“ salt”(随机值)由单向“密钥派生”算法处理,以创建用于至少加密私钥项的密钥在密钥库中,并验证(MAC)整个密钥库。用Java实现的PKCS12(弱)对证书以及私钥进行加密; JKS和JCEKS没有。用Java实现的PKCS12可能不支持与商店密码不同的私钥密码。
如果使用密钥库文件时不能提供正确的密码,则可能会失败,具体取决于您尝试执行的操作,因此您的工作要记住它们,并在必要时转移或分发它们。如果您需要以难以手动管理的规模进行此操作,则可以使用多种类型和多种来源的密码管理工具-可以处理所有事物的密码,而不仅仅是Java密钥库。
对于基于非文件的密钥库,例如某些系统上的PKCS11或Windows上操作系统提供的存储,对于密码的实现和使用方式(如果有的话)取决于该密钥库的详细信息,尽管存储了密码通常是不好或不好的做法。