ECCとRSAアルゴリズムに基づいてPKCS 10の要求と解析を生成する。
2858 ワード
最近会社にプロジェクト用があります。PKCS 10証明書に基づいて証明書を作成してください。そして最近は資料を探して勉強しました。ここで記録してください。
1.まずPKCS 10証明書要求を生成することです。
RSA:
ECC:
ECCアルゴリズムに基づく証明書要求生成とRSAは基本的に一致しています。いくつかの箇所で変更が必要です。
解析PKCS 10要求:
https://www.chinassl.net/ssltools/index.html
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