admin管理员组

文章数量:819736

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()); } 






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