java读取openssl的pkcs8格式的aes128加密的私钥文件

最近在搞一个GRPC的问题,GRPC开启SSL需要读取证书文件,文件格式是PKCS8,这个格式的文件与我们一般使用的RSA文件是一样的,只是格式不一样而已,这个格式是java读取的,虽然不知道java为什么要读取这个格式的文件,但是openssl提供了转换的接口也就不说什么了。

默认的是这个命令,它默认使用的是pbe系列的算法---pbeWithMD5AndDES-CBC

openssl pkcs8 -in ocspserverkey.pem -topk8 -out ocspkcs8key.pem  

pkcs8命令可以参考此链接:

http://blog.csdn.net/as3luyuan123/article/details/16105435


如果指定aes128、sha256等高安全等级的算法也是可以的,只要加入-v2 的命令就可以了 , -v1可以指定3des相关的算法

openssl pkcs8 -in ocspserverkey.pem -topk8 -out ocspkcs8key.pem -v2 aes128


但是蛋疼的问题来了,这个命令指定加密算法后GRPC认不出来了,为啥,因为指定算法后java读取他的算法的名称是2.16.840.1.101.3.4.1.2(当时可能是这个,不确定了),卧槽,当时完全就蒙了,心中一万个草泥马,不指定算法好歹还可以获取算法名pbeWithMD5AndDES-CBC,指定了你给我一串数字,这让我怎么弄,实在没办法google了一下才稍微看出点端倪,这个好像是算法OID,类似编号什么的,openssl,你也是够了,你把编号放算法名称里,权威就是任性啊。

不管怎么样,这生成的key文件GRPC的GrpcSslContext.forServer()不能识别,又要解决这个问题,这让我头疼了好几天。

最后各种谷歌无意中在一个java文件发现了这个数字,搜索原来是在not-yet-commons-ssl-*.jar这个包里,一看名字,有戏,赶紧搜索,找到这个包的官网---http://juliusdavies.ca/commons-ssl/index.html

开始还以为是apache的包,后来看了下还不是,不过这些不重要,重要的是:

not-yet-commons-ssl-*.jar这个包完美的解决了java读取openssl证书的问题,


这个是我后来找到的一个关于这个软件的介绍:

http://www.infoq.com/cn/news/2007/06/not-yet-commons-ssl


最后也祝愿这个包早日能够进入apache的官方包里吧,它确实给java使用ssl证书的填了不少坑。




最最后:

openssl pkcs8 命令默认使用的算法兼容性很高,但是作为企业级生成证书的话,安全性就不是很高了,需要指定aes128等高强度的算法,not-yet-commons-ssl-*.jar是个很好的选择,他能完美解决java读取openssl证书的问题。





展开阅读全文

没有更多推荐了,返回首页