如何添加未签名的属性?
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] 上注册=] 你正在使用。
我正在尝试使用 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] 上注册=] 你正在使用。