ECCとRSAアルゴリズムに基づいてPKCS 10の要求と解析を生成する。

2858 ワード

最近会社にプロジェクト用があります。PKCS 10証明書に基づいて証明書を作成してください。そして最近は資料を探して勉強しました。ここで記録してください。
1.まずPKCS 10証明書要求を生成することです。
RSA:
public static String genCSR()
			throws InvalidKeyException, NoSuchAlgorithmException,
			NoSuchProviderException, SignatureException {
			try 
			{
			Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
			X509Name dn = new X509Name("CN=TEST,O=TEST,L=BJ,C=CN");
                        //         
			KeyPairGenerator keyGen =KeyPairGenerator.getInstance("RSA");
                        //      ,RSA2048     		
                        keyGen.initialize(2048);
			KeyPair kp = keyGen.generateKeyPair();
			PKCS10CertificationRequest p10 = new PKCS10CertificationRequest("SHA1WithRSA", dn, kp.getPublic(),new DERSet(), kp.getPrivate());
			byte[] der = p10.getEncoded();
			String code = "-----BEGIN CERTIFICATE REQUEST-----
"; code += new String(Base64.encode(der)); code += "
-----END CERTIFICATE REQUEST-----
"; CertificationRequestInfo csrinfo = p10.getCertificationRequestInfo(); return code; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }
ここの鍵ペアは自分で生成することができます。条件があれば、CAによって生成された鍵のペアで行うこともできます。
ECC:
ECCアルゴリズムに基づく証明書要求生成とRSAは基本的に一致しています。いくつかの箇所で変更が必要です。
KeyPairGenerator keyGen =KeyPairGenerator.getInstance("ECDSA");
//        
keyGen.initialize(256);
KeyPair kp = keyGen.generateKeyPair();
PKCS10CertificationRequest p10 = new PKCS10CertificationRequest("SHA256WithECDSA", dn, kp.getPublic(),new DERSet(), kp.getPrivate());
ECCの生成鍵は相対的に速くて、演算量が小さいです。そして、今はますます多くの国有企業央企業が増えています。事業単位と政府機関はSM 2を強く押しています。だから、ECCアルゴリズムは今後とても多く使われます。
解析PKCS 10要求:
-----BEGIN CERTIFICATE REQUEST-----
MIIBNzCB3gIBADB8MQswCQYDVQQGEwJDTjELMAkGA1UECAwCQkoxCzAJBgNVBAcM
AkJKMQ4wDAYDVQQKDAVCYWlkdTELMAkGA1UECwwCS0YxFjAUBgNVBAMMDXd3dy5i
YWlkdS5jb20xHjAcBgkqhkiG9w0BCQEWDzEyMzQ1Njc4QHFxLmNvbTBZMBMGByqG
SM49AgEGCCqGSM49AwEHA0IABKQfJUWoH0DFlD4CPUdbNwsoKhUzxvFLfaqc392O
Yj8UGzm8IpajFmKJHj/qg/82Auwn2tg7kpOiGzlUZTbGJCOgADAKBggqhkjOPQQD
AgNIADBFAiBtJqIJzplw/0vy1cUnB2OFp0SQqVfgWVdMfM4PQhiXGgIhAMS4X0kv
NheKLQPkI3qcmQP7B0Xh8PMKGh2LP+fBtzW9
-----END CERTIFICATE REQUEST-----
これはCSR証明書要求のフォーマットです。P 10は中間のセグメントです。これはECC 256桁のP 10要求に基づいて生成しました。
String sb = "";//    P10     ,       
PKCS10 pkcs10 = new PKCS10(new BASE64Decoder().decodeBuffer(sb));//   P10  		
//  P10        	
X500Name attr = pkcs10.getSubjectName();
//    
String alg = pkcs10.getSigAlg();
//  P10    ,             ,         (PS:  C    ,   C         ,API      )
PublicKey publicKey = pkcs10.getSubjectPublicKeyInfo();
また、ここには非常に便利なURLを添付します。CSRに関するツールを提供しています。作成/解析/検証など。
https://www.chinassl.net/ssltools/index.html