cfca采用加密组件Bouncy Castle。
cfca证书工具包包含如下文件(服务器端,以jdk1.4为例):
1、bcprov-jdk14-125.jar:security provider lib
2、bcmail-jdk14-125.jar:貌似邮件用的
3、cfcaDigitalKitTest.jar:cfca自己开发的工具包,就一个类
4、entbase.jar、entuser.jar:cfcaDigitalKitTest.jar要应用的2个jar包
5、cacerts:cfca的根证书链文件,是一个keystore文件,可以用keytool -list查看
6、castle.ini:cfca工具包的配置文件,内容如下
[CRL校验部分]==========貌似可以不配
/*ldap服务器端口号*/
ldapServerPort=389
/*ldap服务器地址*/
ldapServerName=210.74.41.60
/*CFCA CRL cache存放目录*/
cachedCRLDirPath=G:\\testCerts
[用户证书部分]
/*用户证书路径*/==========这里可以配置keystore(扩展名必须是keysotre,写死在cfca工具包中)或者pfx文件
userCertFilePath=D:\\java\\stf\\cfca\\cfcakeystore_server.keystore
/*访问用户证书口令*/
userCertPassword=Passw0rds
/*用户证书别名,可选*/===========如果前面配的是keystore必须指定alias
userCertAlias=cfca_server
[可信CA库口令]=============根证书链文件cacerts的默认文件
trustedCAStorePass=changeit
两种方式使用cfca的证书工具包:
参考:
http://danielzzu.blog.163.com/blog/static/11851530420101194345324/
一、配置方式(以jdk1.4为例)
1. 添加安全库
前置条件:获得/usr/java14目录的写权限
动作:
要添加两个安全jar文件:bcmail-jdk14-125.jar和bcprov-jdk14-125.jar
把这两个jar放到/usr/java14/jre/lib/ext目录下
修改这两个jar包的权限:
chmod 755 bcmail-jdk14-125.jar
chmod 755 bcprov-jdk14-125.jar
2. 配置安全文件java.security
该文件在/usr/java14/jre/lib/security/ 目录下
在其中添加一行:
security.provider.N=org.bouncycastle.jce.provider.BouncyCastleProvider
其中N用具体的数字替换,如果文件中原有的security provider编号最大是4,则这里的N就用5,注意千万不要与原有的security provider编号重复!
3. 更新cacerts文件
该文件在/usr/java14/jre/lib/security/ 目录下
首先对该目录下原cacerts进行备份:mv cacerts cacerts.old
然后把提供的cacerts复制到这个目录下
修改文件权限:chmod 755 cacerts
4. 将cfcaDigitalKitTest.jar、entbase.jar、entuser.jar、castle.ini放到classpath中,就可以调用cfca工具包:
import java.io.File;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.Security;
import java.security.cert.X509Certificate;
import java.util.Enumeration;
import com.cfca.toolkit.*;
public class TestSign {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
TestSign ts=new TestSign();;
String msg="test string !!!!!!";
System.out.println("签名前数据:"+msg);
String signedMsg=ts.signData(msg);
System.out.println("签名后数据:"+signedMsg);
String checkedMsg=ts.checkSign(signedMsg);
System.out.println("验证签名后数据:"+checkedMsg);
}catch(Exception e){
e.printStackTrace();
}
}
public String signData(String msg) throws Exception{
Castle.iniFilePath = "D:\\java\\stf\\castle_client.ini";
Castle castle=new Castle();
castle.initCertAppContext();
return castle.signData(msg);
}
public String checkSign(String msg) throws Exception{
Castle.iniFilePath = "D:\\java\\stf\\castle.ini";
Castle castle=new Castle();
// castle.initCertAppContext();
System.out.println("签名者DN:"+castle.getDN(castle.getCertificate(msg)));
return castle.verifySignedData(msg);
}
}
二、编码方式
配置方式稍显麻烦,编码方式无非在程序中指定provider
悲剧:cfca证书工具包中指定trustkeystore只能是上述配置的位于jdk目录的cacerts,不能放在其他地方
//指定truststore(但经过测试,仅用客户端证书签名,用服务器端证书验证签名不需要配置truststore)
//验证签名不需要配置trustCA,但调用cfca工具包的验证证书命令:verifyCertificate,就需要配置信任CA
// System.setProperty("javax.net.ssl.trustStore","D:\\java\\stf\\cacerts");
// System.setProperty("javax.net.ssl.trustStorePassword","changeit");
//指定provider
Security.addProvider(new BouncyCastleProvider());
import java.io.File;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.Security;
import java.security.cert.X509Certificate;
import java.util.Enumeration;
import com.cfca.toolkit.*;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class TestSign {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
TestSign ts=new TestSign();
String msg="test string!!!!!!!!!";
System.out.println("签名前数据:"+msg);
String signedMsg=ts.signData(msg);
System.out.println("签名后数据:"+signedMsg);
String checkedMsg=ts.checkSign(signedMsg);
System.out.println("验证签名后数据:"+checkedMsg);
}catch(Exception e){
e.printStackTrace();
}
}
public TestSign(){
//指定truststore(但经过测试,仅用客户端证书签名,用服务器端证书验证签名不需要配置truststore)
//验证签名不需要配置trustCA,但调用cfca工具包的验证证书命令:verifyCertificate,就需要配置信任CA
// System.setProperty("javax.net.ssl.trustStore","D:\\java\\stf\\cacerts");
// System.setProperty("javax.net.ssl.trustStorePassword","changeit");
//指定provider
Security.addProvider(new BouncyCastleProvider());
}
public String signData(String msg) throws Exception{
Castle.iniFilePath = "D:\\java\\stf\\castle.ini";
Castle castle=new Castle();
castle.initCertAppContext();
return castle.signData(msg);
}
public String checkSign(String msg) throws Exception{
Castle.iniFilePath = "D:\\java\\stf\\castle_client.ini";
Castle castle=new Castle();
// castle.initCertAppContext();
System.out.println("签名者DN:"+castle.getDN(castle.getCertificate(msg)));
return castle.verifySignedData(msg);
}
}
分享到:
相关推荐
CFCA证书环境Java安装,适用于金融业平台的统一登录
CFCA工具包_服务器端(JAVA版)接口定义.doc
php 通过CFCA证书实现RSA的PKCS7格式的签名和验签步骤demo文件和扩展文件,php通过.pfx和.cer结尾证书进行CFCA签名 通过具体可以查看https://blog.csdn.net/weixin_39934453/article/details/125695880 你是不是遇到...
电子签名使用的很多证书都是CFCA的根证书,大家可以在自己的pdf阅读器中导入此根证书就可以直接查看签名的有效性。
CFCA全球信任证书技术手册V4.2
CFCA全球服务器证书技术手册,到CFCA上都下载不到,找了N久才有此文档,如果你要做的是需要CFCA认证的web服务器证书,那么提前阅读本文档将给你减少很多麻烦,上面很详细的介绍了如何使用Java的keytool工具生成....
1101 证书申请并下载 申请证书,激活并下载 1201 证书更新并下载 更新证书,激活并下载 2901 证书吊销 已激活证书吊销,放入吊销列表(CRL) 7101 证书查询 如果指定了条件对应的值,该查询条件有效 7102 唯一证书查询...
CFCA数字证书和电子签章业务申请单.doc
java com.cfca.sadk 3.2.1.3版本
CFCA用于测试U盾及相关组件功能是否正常的测试平台。已支持国密证书。 WINRAR 5.50以上版本解压缩
证书使用RSA(1024位)证书,可以使用自签名证书,也可以向类似CFCA这样的三方机构申请证书。 在使用过程中,需要将证书进行转码处理。公钥证书以 X.509(v3) 标准格式进行编码,私钥证书以pkcs8格式编码。
java利用bouncycastle生成国密x509证书并将证书以pem格式存入文件
CFCA中国金融认证中心 的 CFCA技术培训
SM2密码算法CFCA测试用证书链,标准的SM2证书验证用。
CFCA安全认证组件及使用代码实例程序C#
logback-cfca-jdk1.6-3.1.0.0.jar
语言:中文 (简体) Sign transaction data with a smart card.cfca证书加解密cfca证书加解密cfca证书加解密cfca证书加解密
2018年互联网金融行业热点研究-CFCA-201812.pdf