2017-12-21 40 views
1

bouncy castle 1.58を使用してp7b証明書チェーンを生成する必要があります。私たちが使用古いバージョン(1.46)でJavaでbouncycastleでp7b証明書チェーンを生成する

は、このコードが働いた:

 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); 
     } 

はしかし、弾む城の新しいバージョンで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); 
     } 

しかし、私は生成内でこの行にnullポインタ例外を取得:

CMSSignedData signedData = gen.generate(null); 

デバッグしようとしましたが、JcaCertStoreに証明書がロードされていることを確認しました。

しかし、バウンシーキャッスルライブラリをデバッグしようとすると、デバッガはCMSSignedDataGeneratorクラスの行番号を見つけることができないようです。

私はWildflyを使用してプロジェクトを展開していますが、ソースをデバッガに添付しましたが、コードが表示されますがクラス名のすぐ隣に行がありません、そうではありませんNULLポインター例外がどこで発生するかを見ることができます。私は、次のコード使用して問題を解決しenter image description here

答えて

0

:しかし

 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); 
     } 

を、私が見るのも面白い何

enter image description here

は、私は、そのクラスに中空のJavaアイコンが表示されていることですこれは、CMSSignedDataGeneratorを使用して、p7b証明書チェーンを生成するための署名用のハックの一種です。

古いバージョンでは、nullを署名付きのデータとして使用できますが、空のバイト配列であってもデータを入力する必要があります。

関連する問題