如何添加未签名的属性?

How can I add UnsignedProperties?

我正在尝试使用 XADES-BES 和智能卡签署 XML 文档。 我根据需要对 class 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);
}}

我不认为我完全理解你在尝试什么,因为你似乎在搞乱 lib 源代码。不管怎样,看看 this page on the project docs.

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

其他属性是高级表单的一部分,只能在验证现有签名期间添加。有关更多信息,请参阅 this wiki page and [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))。

最后,一些属性(例如 CounterSignature)不依赖于任何特定的形式,并且可以使用自定义 SignaturePropertiesProvider 添加到任何签名,在 signing profile[=25] 上注册=] 你正在使用。