자체 제작 jceprovider 국밀 증서 발급
2263 단어 국비 증서SM2jceproviderJeffProvider
SM3 with SM2 서명을 실현한 jce provider는 아직 공개되지 않았다.반면 sm3, sm2, SM3 with SM2 알고리즘의 실현은 비일비재하다.QQ:22066821
서명 알고리즘만 실현된 JCE Provider는 SUN(지금은 Oracle)이 jar 패키지 서명을 할 필요가 없고 완전히 자체적으로 실현할 수 있다.
본고는BC157버전을 바탕으로 개발한 것으로 BC157버전에서 SM2/sM3/sM4 등 국밀 알고리즘을 지원했다. 물론 지원하는 방식은lightweight API이지 Provider에서 지원하는 것이 아니다.
자체 제작된 JeffProvider의 예는 다음과 같습니다.
public JeffProvider() {
AccessController.doPrivileged(new PrivilegedAction
인증서 생성 예는 다음과 같습니다.
String alg = "SM3withSM2";
Date dateBegin = new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24);
Date dateEnd = new Date(System.currentTimeMillis() + 1000L * 60 * 60 * 24 * 365 * 32);
X500Name issuer = new X500Name("C=CN,ST=SD,L=QD,O=Lgao,OU=KJ,CN=user001");
BigInteger serial = BigInteger.valueOf(System.currentTimeMillis());
PKCS10CertificationRequest p10 = new PKCS10CertificationRequest(BaseUtils.hex2byte(p10s));
Logger.debug(p10.getSubject());
Logger.debug(BaseUtils.byte2hex(p10.getSubjectPublicKeyInfo().getEncoded()));
X509v3CertificateBuilder v3builder = new X509v3CertificateBuilder(issuer, serial, dateBegin, dateEnd,p10.getSubject(), p10.getSubjectPublicKeyInfo());
//
ContentSigner sigGen = new JcaContentSignerBuilderXA(alg).setProvider(new JeffProvider()).build(null);
X509CertificateHolder holder = v3builder.build(sigGen);
BaseUtils.saveData(holder.toASN1Structure().getEncoded(), "e:/temp/sm2.dat");
Logger.debug(BaseUtils.byte2hex(holder.toASN1Structure().getEncoded()));
글에서 JcaContent Signer Builder를 참조하여 JcaContent Signer Builder XA를 완성하였으며, 자세한 내용은 전편을 참조하시기 바랍니다.http://linuxgao.iteye.com/blog/2207557