我正在开发一个Java(JSE 7)应用程序,它从外部服务器接收SSLeay格式的私钥,并且需要构造一个java.security.PrivateKey派生的对象。由于密钥是动态接收的,并且禁止应用程序使用JNI,因此我无法使用openssl转换密钥。
相反,我正在寻找一种纯Java解决方案,用于将SSLeay转换为PKCS#8或其他可以构造PrivateKey的格式。
谷歌搜索显示了几个处理SSLeay密钥的第三方库(例如,一个来自“Entrust”),但遗憾的是,在此实现中不能使用任何外部库。是的我知道。甚至不是Commons。
是否有人知道JSE 7标准库中的任何工具可以帮助解决这个问题?我不介意自己编写转换,但很难找到SSLeay的精确规范。
感谢您的任何指示!
答案 0 :(得分:0)
请注意,此答案仅在我受限制时才有用,以避免使用任何第三方库。如果您被允许使用BouncyCastle或其他库,那么这可能是更好的方法。
我收到的密钥是OpenSSL(“传统SSLeay”)DER格式的RSA密钥,编码为PEM。我能够通过以下方式获取Java java.security.PrivateKey
对象:
String.replace
删除PEM字符串中的RSA密钥页眉和页脚。DatatypeConverter.parseBase64Binary()
从PEM字符串中获取字节数组。BigInteger
:版本,模数,公共指数,私有指数,素数P,素数Q,素数指数P,素数指数Q和CRT系数(按此顺序) )。java.security.spec.RSAPrivateCrtKeySpec
对象(keySpec
)。PrivateKey key = KeyFactory.getInstance("RSA").generatePrivate(keySpec);
这对我的目的起作用,但是对于几个轮子来说是一个不幸的重新发明。