2017-12-21 57 views
1

탄력성이있는 성 1.58을 사용하여 p7b 인증서 체인을 생성해야합니다. 탄력이 성의 새로운 버전으로 CMSSignedDataGenerator의 몇 가지 변화가, 그러나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); 
     } 

를, 그래서 이렇게 내 코드를 수정 : 우리가 사용하는 이전 버전 (1.46)에서

,이 코드는 일 :

CMSSignedData signedData = gen.generate(null); 
: 그러나

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

, 나는 생성이 내부에이 줄에 널 포인터 예외가

디버깅을 시도하고 JcaCertStore에 인증서가로드되었는지 확인 했으므로 해당 부분이 정상입니다.

그러나 탄력 성 라이브러리를 디버깅하려고하면 디버거가 CMSSignedDataGenerator 클래스의 행 번호를 찾지 못하는 것 같습니다.

내 프로젝트를 배포하는 제이보스를 사용하고 있는데 내가 코드를 볼 수 있지만 바로 옆에 클래스 이름 난 사용할 수 일치하지 얻을 수 있지만, 디버거 소스와 함께 항아리를 첨부했습니다, 그래서 아니에요 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

내가 그 클래스에 빈 자바 아이콘을 볼 수 있다는 것입니다 이것은 해킹의 일종으로 CMSSignedDataGenerator을 사용합니다. 이것은 p7b 인증서 체인을 생성하기위한 서명을위한 것입니다.

이전 버전에서는 null을 서명 된 데이터로 사용할 수 있지만 이제는 빈 바이트 배열 인 경우에도 일부 데이터를 입력해야합니다.