Android 生成PKCS10請求(csr)

Android 生成PKCS10請求(csr)

在做到自簽名的SSL的雙向認證的時候,客戶端需要生成p10請求傳給服務器,服務器簽名之後返回PKCS7證書信息,客戶端使用本地密鑰和PKCS7證書的合成PKCS12證書,就可以進行雙向認證了,這裏記錄下p10證書的生成過程

引入三方jar包

// 這個是加解密相關的包
implementation group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.62'
// 主要用到這個
implementation group: 'org.bouncycastle', name: 'bcpkix-jdk15on', version: '1.62'

完整代碼如下


  // 生成KeyPair
    public static KeyPair generateKeyPair() throws NoSuchAlgorithmException {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        // 加密規格爲128/256位   ===> 1024/2048
        keyPairGenerator.initialize(2048);
        return keyPairGenerator.genKeyPair();

    }
    // 生成p10證書
    public static String generatePKCS10(KeyPair keyPair) throws Exception {
        // 證書籤名算法
        String sigAlg = "SHA256withRSA";
        // 各種基本信息
        String params = "CN=CN,OU=Trustmobi,O=client3,L=BJ2";

        // CN和公鑰
        PKCS10CertificationRequestBuilder p10Builder = new JcaPKCS10CertificationRequestBuilder(
                new X500Name(params), keyPair.getPublic());
        // 簽名算法
        JcaContentSignerBuilder csBuilder = new JcaContentSignerBuilder(sigAlg);
        csBuilder.setProvider(new BouncyCastleProvider());

        ContentSigner signer = csBuilder.build(keyPair.getPrivate());
        // 生成PKCS10的二進制編碼格式(ber/der)
        PKCS10CertificationRequest p10 = p10Builder.build(signer);

        //將二進制格式轉換爲證書格式(csr)
        PemObject pemObject = new PemObject("CERTIFICATE REQUEST", p10.getEncoded());
        StringWriter str = new StringWriter();
        JcaPEMWriter jcaPEMWriter = new JcaPEMWriter(str);
        jcaPEMWriter.writeObject(pemObject);
        jcaPEMWriter.close();
        str.close();
        // base64便於網絡傳輸
        return Base64.encode(str.toString());
    }

代碼收錄

https://github.com/ddssingsong/AnyTool
cipher模塊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章