我有一个密钥库,用于生成一些.csr
文件,发送这些文件并返回.p7b
个文件。但是我设法丢失了我的密钥库密码,我看到有一个强大的java程序来解决它,但我知道我的密码是15个字符长,这将需要很长时间。我也试过用旧的密钥库创建一个新的密钥库,就像有些人建议的那样,但它仍然需要我输入密码而没有它就会失败。
如果我只是创建一个新的密钥库并将证书导入到该密钥库中,或者我是否需要申请新证书,我是否会遇到问题?
答案 0 :(得分:1)
如果我只是创建一个新的密钥库并将证书导入到那个
中,我可能会遇到问题
您将遇到无法解决的问题。您已无法访问私钥。
还是我必须申请新证书?
您必须创建一个新的密钥库,密钥对,CSR,签名,导入它,...
答案 1 :(得分:0)
实际上它有点复杂。尽管它的名称,Java'密钥库'实际上可以包含以下任意组合:
PrivateKeyEntry - 包含私钥和匹配的证书或链,用于证明您自己的身份,特别是对于SSL / TLS服务器
TrustedCertEntry - 包含证书,通常是根CA证书,用于验证其他方,包括验证服务器的SSL / TLS客户端
(仅限某些格式,不是常见的JKS)SecretKeyEntry - 此处不相关
见the javadoc for java.security.KeyStore
。实际上,用于验证服务器的SSL中的SSL / TLS(包括HTTPS)客户端使用的CA证书的“信任库”通常是密钥库文件,默认情况下,JRE / lib / security / cacerts是作为JRE的一部分提供的(对于Oracle) -formly-Sun软件包)或从它链接(对于OpenJDK,至少在我使用过的系统中)。
因此,如果您告诉keytool
将您自己的证书导入新的密钥库文件,它会这样做 - 但是作为可以识别其他人的可信证书条目,而不是私钥可以识别您的条目。唯一的指示是微妙的:keytool
会说Certificate was added
(这意味着一个被信任的人)不是Certificate reply was installed
(这意味着匹配的私钥)。
如果您随后将此cert-only-non-privatekey密钥库用于SSL / TLS服务器,则不会立即或明显出现错误;通常它会拒绝所有连接尝试,因为“没有共同的密码套件”。 (如果两个端点都配置为允许“匿名”密码套件,那么连接将/可能会成功使用匿名套件,但这不能抵御现在常见的主动攻击,因此通常不会。)
但是这并没有改变结果:如果没有密码并因此访问旧的私钥,你就会被楔入并且必须重新开始。请注意,如果您使用付费CA,则许多(大多数IME)允许免费或以相当大的折扣“重新加密”相同域名的证书。