0

我正在尝试使用 XADES-BES 和智能卡签署 XML 文档。我根据需要在类 SignerBES.java 中进行了一些更改,并且签名创建运行良好!

我的问题:我怎样才能添加 UnsignedProperties 来得到这样的东西:

                <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 的代码片段:

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

我试图在 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);
}}
4

1 回答 1

0

我不认为我完全理解你在尝试什么,因为你似乎在搞乱 lib 源代码。无论如何,请在项目文档上查看此页面

当您使用其中一个签名配置文件时,xades4j 会自动添加许多未签名的限定属性(例如,如果您使用XAdesCSigningProfile,则会添加 CompleteCertificateRefs/CompleteRevocationRefs)。

其他属性是高级表单的一部分,只能在验证现有签名期间添加。请参阅此 wiki 页面和 [此 javadocs 页面]( 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)) 了解更多信息。

最后,一些属性(例如 CounterSignature)不绑定到任何特定的表单,并且可以使用自定义添加到任何签名,在您正在使用的签名配置文件SignaturePropertiesProvider上注册。

于 2017-10-30T21:52:53.343 回答