1

pdf-box 라이브러리 (v2.0.8)를 사용하여 pdf 문서에 디지털 서명을 추가하려고합니다. 웹 서비스 (서명 된 개인 키로 만 서명)에서 이미 서명 된 콘텐츠를 받고 있습니다. 이제 서명 된 데이터에 인증서 정보를 연결하여 PDF 문서에 추가 할 수 있어야합니다. 가급적 성기 성 API를 사용하여 이미 서명 된 콘텐츠에 인증서를 추가하는 방법은 무엇입니까?이미 서명 된 데이터에 인증서 정보를 연결하는 방법은 무엇입니까?

// here content is data which has to be signed 
public byte[] sign(InputStream content) throws IOException { 
     try { 
      CMSSignedDataGenerator gen = new CMSSignedDataGenerator(); 
      List<Certificate> certList = new ArrayList<Certificate>(); 
      certList.add(certificate); 
      Store certs = new JcaCertStore(certList); 
      gen.addCertificates(certs); 

      CMSProcessableInputStream msg = new CMSProcessableInputStream(signPrivate(content)); 
      CMSSignedData signedData = gen.generate(msg, false); 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      DEROutputStream dos = new DEROutputStream(baos); 
      dos.writeObject(signedData.toASN1Structure()); 
      return baos.toByteArray(); 
     } catch (Exception e) { 
      throw new IOException(e); 
     } 
    } 

여기서 디지털 서명을 생성 할 수 있지만 인증서 정보는 포함되어 있지 않습니다. 이미 thisthis 질문을 확인했지만 콘텐츠가 이미 개인 키를 사용하여 seperatly로 서명되어 있고 인증서 만 연결해야하는 경우는 없습니다.

+1

심각하게 받아 들여지는 모든 CMS 서명 프로파일에서 해당 인증서에 대한 참조가 서명 된 데이터가 서명되기 전에 * 해당 인증서가 필요합니다. – mkl

+0

@mkl, 나중에 인증서를 연결할 수 없으며 개인 키로 콘텐츠에 서명 할 때만 할 수 있다고 말씀 하시겠습니까? –

답변

1

(당신이 게시 코드는 CMS 서명 용기를 의미한다, 그래서 우리가 또는 PDF 서명을 ETSI.CAdES.detached adbe.pkcs7.detached 이야기 가정합니다.)

서명에를 만들 때 CMS 서명 컨테이너의 경우, 서명 값이 실제로 문서 데이터의 해쉬에만 서명하는지 또는 소위 부호가있는 속성 (사양의 signedAttrs)의 컬렉션에 서명하는지 여부를 선택할 수 있습니다. 문서 데이터는 이러한 속성 중 하나의 값일뿐입니다.

SignerInfo ::= SEQUENCE { 
    version CMSVersion, 
    sid SignerIdentifier, 
    digestAlgorithm DigestAlgorithmIdentifier, 
    signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL, 
    signatureAlgorithm SignatureAlgorithmIdentifier, 
    signature SignatureValue, 
    unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL } 

(RFC 5652 section 5.3. SignerInfo Type)

본 계약 심각 할 모든 프로파일을하지만, 당신이 특히 그들이 ESS 서명 인증서 (RFC 2634 section 5.4) 또는 ESS를 사용하도록 요구하는 서명 속성을 사용해야 signing-certificate-v2 (RFC 5035 section 3) 서명자 인증서를 참조하는 서명 된 특성

따라서 이러한 특성에서 서명의 서명 인증서와의 연결은 으로 고정되어 전에 서명 값이 생성됩니다.

따라서 이미 서명 된 인증서에 서명 인증서를 자유롭게 연결할 수 없습니다.

관련 문제