자체 제작 jceprovider 국밀 증서 발급

자세히 보기
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() {
			@Override
			public Object run() {
				//            //  :  .  
				put("Signature.SHA1withRSA", "com.lgao.provider.sign.Sha1RSA");
				put("Signature.MD5withRSA", "com.lgao.provider.sign.Md5RSA");
				put("Signature.SM3withSM2", "com.lgao.provider.sign.SM3withSM2");
				return null;
			}
		});
	}

인증서 생성 예는 다음과 같습니다.

		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

좋은 웹페이지 즐겨찾기