繁体   English   中英

使用KeyStore -Java存储自己制作的密钥

[英]Store own made key using KeyStore -Java

我有一个基于Clifford Cocks基本技术的简单RSA算法。 我已经完成所有工作,但是我需要将私钥和公用密钥存储在KeyStore中,以便服务器和客户端可以使用密钥共享文件。

我做了一些研究,发现了有关“ keytool”命令的信息,但是它使用RSA或DES为您创建了密钥,而且我不知道如何使用它来存储自己的密钥。 有什么办法解决这个问题吗?

或者如何使用KeyStore类解决此问题?

谢谢。

PD:密钥现在存储在BigIntegers中。 但是我不认为这很重要。

听起来您已经开发了自己的RSA算法实现,并且拥有自己的私有和公共密钥类。 我将假设这是出于教育目的,并且避免使用现有的实现方式。

但是,要使用现有的KeyStore提供程序,您需要将密钥转换为该提供程序要求的存储格式。 从密钥存储中检索回密钥后,您需要执行反向转换回您自己的私有/公共密钥类。

在我看来,要获得将密钥推入KeyStore对象的最小好处,这似乎是一项巨大的工作。 我建议您考虑使用序列化数据制作自己的简单存储方案。

根据本文 ,公共和私有密钥与“普通” RSA密钥没有什么不同。 所以,你可以使用相同的RSAPublicKeyRSAPrivateCrtKey作为容器。 问题在于KeyStore实现非常有限(pkcs#12,jks,jceks)-它们不能用于存储单个私钥。 您将需要为公共密钥创建证书链。 这可能是一个自签名证书,但是仅存储密钥是很麻烦的。

您也可以创建自己的KeyStore实现,但这似乎是一项繁重的工作。 在您自己的提供程序中实现KeyStoreSpi稍微复杂些,但是它要求您的提供程序使用私钥和Oracle签名的证书进行签名。

基本上,我会使用上面解释的自签名证书技巧或Duncan提出的序列化方案。


对于非信徒:

Exception in thread "main" java.lang.IllegalArgumentException: invalid zero-length input chain
    at java.security.KeyStore$PrivateKeyEntry.<init>(KeyStore.java:393)

Exception in thread "main" java.lang.NullPointerException: invalid null input
    at java.security.KeyStore$PrivateKeyEntry.<init>(KeyStore.java:390)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM