2017-10-30 21 views
0

XADES-BES와 스마트 카드를 사용하여 XML 문서에 서명하려고합니다. 필자의 필요에 따라 SignerBES.java 클래스를 약간 변경했는데 서명 작성이 잘되었습니다! UnsignedProperties를 어떻게 추가합니까?

내 질문

:

Collection<SignedSignatureProperty> fsssp = new ArrayList<SignedSignatureProperty>(2); 
Collection<UnsignedSignatureProperty> fsusp = new ArrayList<UnsignedSignatureProperty>(2); 


getFormatSpecificSignatureProperties(fsssp, fsusp, signingCertificateChain); 
// Gather all the signature and data objects properties. 
QualifyingProperties qualifProps = qualifPropsProcessor.getQualifyingProperties(
     signedDataObjects, fsssp, fsusp); 

// LOG 
System.out.println("fsusp"+fsusp.size()); 

내가 추가하려고 :

   <SignerRole> 
      <ClaimedRoles> 
      <ClaimedRole>EST</ClaimedRole> 
      </ClaimedRoles> 
     </SignerRole> 
     </SignedSignatureProperties> 
     <SignedDataObjectProperties> 
     <DataObjectFormat ObjectReference="#sigId"> 
      <Description>des</Description> 
      <MimeType>text/xml</MimeType> 
      <Encoding>base64</Encoding> 
     </DataObjectFormat> 
     <CommitmentTypeIndication> 
      <CommitmentTypeId> 
      <Identifier/> 
      </CommitmentTypeId> 
      <AllSignedDataObjects/> 
      <CommitmentTypeQualifiers> 
      <CommitmentTypeQualifier>commitment</CommitmentTypeQualifier> 
      </CommitmentTypeQualifiers> 
     </CommitmentTypeIndication> 
     </SignedDataObjectProperties> 
    </SignedProperties> 
    <UnsignedProperties> 
     <UnsignedSignatureProperties> 
     <SignatureTimeStamp> 
      <EncapsulatedTimeStamp>noTimStampToken</EncapsulatedTimeStamp> 
     </SignatureTimeStamp> 
     <CounterSignature/> 
     <CompleteCertificateRefs/> 
     <CompleteRevocationRefs/> 
     <SigAndRefsTimeStamp/> 
     <RefsOnlyTimeStamp/> 
     <CertificatesValues/> 
     <RevocationValues/> 
     <ArchiveTimeStamp/> 
     </UnsignedSignatureProperties> 
    </UnsignedProperties> 
    </QualifyingProperties> 
</ds:Object> 

이이 코드 조각 SignerBES.java이다 : 나는 이런 식으로 뭔가를 얻을 수 UnsignedProperties을 추가 할 수있는 방법 그것 SignerBES.java 및 DefaultSignaturePropertiesProvider.java하지만 그것을 추가 할 수있는 방법을 모르겠다 :

public class DefaultSignaturePropertiesProvider implements SignaturePropertiesProvider 
{ 
@Override 
public void provideProperties(SignaturePropertiesCollector signaturePropsCol) 
{ 
signaturePropsCol.setSigningTime(new SigningTimeProperty()); 
signaturePropsCol.setSignerRole(new SignerRoleProperty("EST")); 

// UnsignedProperty 
// OtherUnsignedSignatureProperty otherUnsignedProp=null;  
// signaturePropsCol.addOtherSignatureProperty(otherUnsignedProp); 
}} 

답변

0

당신이 lib 소스 코드를 엉망으로 만들고있는 것처럼 보이기 때문에 나는 당신이 무엇을 시도하는지 완전히 이해하지 못한다고 생각합니다. 어쨌든 this page on the project docs을 확인하십시오.

서명 프로필 중 하나를 사용할 때 (예 : XAdesCSigningProfile을 사용하는 경우 CompleteCertificateRefs/CompleteRevocationRefs가 추가되는 경우) 많은 서명되지 않은 한정 속성이 xades4j에 의해 자동으로 추가됩니다.

기타 속성은 고급 양식의 일부이며 기존 서명의 유효성을 검사하는 동안에 만 추가 할 수 있습니다. 추가 정보는 this wiki page 및 [this javadocs page] (http://luisgoncalves.github.io/xades4j/javadocs/1.4.0/reference/xades4j/verification/XadesVerifier.html#verify(org.w3c.dom.Element, xades4j.verification.SignatureSpecificVerificationOptions, xades4j.production.XadesSignatureFormatExtender, xades4j.verification.XAdESForm)을 참조하십시오.

마지막으로, 일부 속성 (예를 들어, 부서) 특정 형식에 연결되지 않으며, 사용중인 서명 프로필에 등록 된 사용자 정의 SignaturePropertiesProvider을 사용하는 서명에 추가 할 수 있습니다.

+0

Luis. 저는 스마트 카드로 서명하는 초보자입니다. 다음과 같이 추가 할 수 있습니다. signaturePropsCol.addOtherSignatureProperty (otherUnsignedProp) 추가 할 UnsignedProperties가 여러 개 있으며 고급 상태입니다 (명확하지 않음)? 수동으로 블록을 추가하면 서명 검사가 유효하지 않게됩니까? . –

+0

내가 응답에 대해 말했듯이 xades4j를 사용하면 목록과 같이 추가하지 않아도됩니다. 특정 양식에 대한 서명되지 않은 서명 속성은 해당 서명 프로파일을 사용할 때 자동으로 추가됩니다. 다른 서명되지 않은 속성은 사용자 지정 SignaturePropertiesProvider를 통해 추가 할 수 있습니다. – lgoncalves