WebSphere下使用CA证书进行签名和加解密的方法

前一段时间在项目中用到了信息的加解密和生成数字签名和验签,其中使用了CA给提供的安全证书和工具jar包--javasafeengine.jar,项目在Tomcat下跑的一切正常,但当项目部署到WebSphere时却签名模块跟加密模块却无法工作,在网上查了很多的资料,基本确定了是由于WebSphere使用的是IBM自己的JDK引起的问题,在Tomcat环境下,加密工具jar包所采用的都是Sun公司所提供的加密和签名算法,而在IBM-JDK环境下这些算法都被IBM重新写过,因此需要对原先的参数做一些修改;

另,由于WebSphere部署于linux中,因此原先的PKCS12格式的密钥无法使用,需要把PKCS12格式的密钥文件转换为JKS格式的密钥,方法是在cmd中输入命令:

keytool -importkeystore -v  -srckeystore src.pfx -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore dest.keystore -deststoretype jks -deststorepass 123456 


在使用的过程中,需要做出以下几点修改:

1.在进行生成签名的过程中,首先需要加载密钥文件,就是刚才那个.jks结尾的文件,但是如果使用工具包中的方法:

private static javasafeengine oSE=SafeEngine.getInstance(); 
 KeyStore ks=oSE.getKeyStore("JKS","SUN","/opt/my/test.jks","123456");

会在加载过程中出现莫名的错误,在加载过程中不会暴露,但是会造成之后的签名失败。因此需要我们手工编写读入JKS文件的方法:

KeyStore ks=null; 
try { 
                        ks= KeyStore.getInstance("JKS"); 
                } catch (KeyStoreException e1) { 
                        // TODO Auto-generated catch block 
                      logger.warn("KeyStore instance error:"+e1); 
                       e1.printStackTrace(); 
               } 
BufferedInputStream bufferinput = new BufferedInputStream(new FileInputStream(KEYSTORE_FILE)); 
ks.load(bufferinput,"123456".toCharArray()); 
bufferinput.close(); 

然后在使用工具包中的签名方法就可以了:

byte[] bSign=oSE.sign(data.getBytes("UTF-8"),ks,"","123456","SHA1WithRSA","IBMJCE");
其中IBMJCE是WebSphere所特有的,如果是在Tomcat下,应该替换为SunRsaSign;

进行加密的方法是:

byte[] bCipher=oSE.encrypt(str.getBytes("UTF-8"),bten,"DESege","IBMJCE")

bten是加密密钥 类型是byte[]

IBMJCE也是WebSphere特有的,Tomcat下替换为SunJCE


在类文件的最前边要手动加载Sun的相关类:

static{ 
                Security.addProvider(new SunJCE()); 
                Security.addProvider(new sun.security.provider.Sun()); 
                Security.addProvider(new SunRsaSign()); 
        } 






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值