簡體   English   中英

用Java中的Bouncycastle生成p7b證書鏈

[英]Generate p7b certificate chain with bouncycastle in Java

我需要使用充氣城堡1.58生成p7b證書鏈。

在我們使用的舊版本(1.46)中,此代碼有效:

        CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
        Certificate [] chain = certificate.getCertificateChain();
        CertStore certStore;
        try {
            certStore = CertStore.getInstance("Collection", new CollectionCertStoreParameters(Arrays.asList(chain)));
            gen.addCertificatesAndCRLs(certStore);

            CMSSignedData signedData = gen.generate(null,(Provider)null);
            return signedData.getEncoded();
        } catch (Exception ex) {
            logger.error("Failed to construct P7B response",ex);
            throw new RuntimeException(ex);
        }

但是,新版本的Bouncy Castle對CMSSignedDataGenerator進行了一些更改,因此我像這樣修改了代碼:

        CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
        Certificate [] chain = certificate.getCertificateChain();
        try {
            JcaCertStore store = new JcaCertStore(Arrays.asList(chain));
            gen.addCertificates(store);

            CMSSignedData signedData = gen.generate(null);
            return signedData.getEncoded();
        } catch (Exception ex) {
            logger.error("Failed to construct P7B response",ex);
            throw new RuntimeException(ex);
        } 

但是,我在generate的這一行上得到一個空指針異常:

CMSSignedData signedData = gen.generate(null);

我嘗試調試,並檢查證書是否已加載到JcaCertStore,因此該部分正常。

但是,當我嘗試調試充氣城堡庫時,調試器似乎找不到CMSSignedDataGenerator類的行號。

我正在使用Wildfly部署我的項目,並且將帶有源的jar附加到調試器,但是我看到了代碼,但是在類名旁邊,我沒有得到line ,所以我看不到null發生指針異常。

在此處輸入圖片說明

有趣的是,我在該類上看到一個空心的Java圖標: 在此處輸入圖片說明

我使用以下代碼解決了該問題:

        CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
        Certificate [] chain = certificate.getCertificateChain();
        try {
            CMSProcessableByteArray msg = new CMSProcessableByteArray("".getBytes());
            JcaCertStore store = new JcaCertStore(Arrays.asList(chain));
            gen.addCertificates(store);
            CMSSignedData signedData = gen.generate(msg);
            return signedData.getEncoded();
        } catch (Exception ex) {
            logger.error("Failed to construct P7B response",ex);
            throw new RuntimeException(ex);
        } 

但是,當您使用CMSSignedDataGenerator時 ,我認為這是一種黑客手段 ,它旨在進行簽名以生成p7b證書鏈。

在舊版本中,您可以將null用作已簽名的數據,但是現在您必須輸入一些數據,即使它只是一個空字節數組也是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM