- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用智能卡进行签名以及使用 SunMSCAPI 提供程序和 Windows keystore 。使用 xades4j 1.3.2 版本,我正在如下唱一个 xml 文件,它运行良好,证书也嵌入在 KeyInfo 的 xml 文件中,
private Document signXMLData(Document doc) {
try {
XadesSigningProfile p;
p = new XadesBesSigningProfile(keyingDataProvider).withSignaturePropertiesProvider(new SignaturePropertiesProvider() {
@Override
public void provideProperties(SignaturePropertiesCollector signedPropsCol) {
signedPropsCol.setSignerRole(new SignerRoleProperty(SignerRole));
signedPropsCol.setSignatureProductionPlace(new SignatureProductionPlaceProperty(City, State, PostalCode, Country));
signedPropsCol.setSigningTime(new SigningTimeProperty());
}
});
XadesSigner signer = p.newSigner();
Element elemToSign = doc.getDocumentElement();
new Enveloped(signer).sign(elemToSign);
Log.LogOperation("XML signing completed successfully.");
} catch (Exception ex) {
Log.LogException(ex);
doc = null;
}
return doc;
}
但我的问题是,在使用以下代码进行验证时,出现以下错误,
代码
public boolean VerifyXMLSign(String data) throws ParserConfigurationException, SAXException, IOException, TransformerConfigurationException, TransformerException, Exception {
InputSource isIn = new InputSource();
isIn.setCharacterStream(new StringReader(data));
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
Document doc = dbf.newDocumentBuilder().parse(isIn);
//Document doc = dbf.newDocumentBuilder().parse(new FileInputStream("c:/xml.xml"));
DOMHelper.useIdAsXmlId(doc.getDocumentElement());
KeyStore ks = KeyStore.getInstance("Windows-ROOT", "SunMSCAPI");
ks.load(null, null);
X509Certificate x509Certificate = null;
PublicKey key = null;
DOMValidateContext valContext = new DOMValidateContext(new X509KeySelector(ks), getSigElement(doc));
XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM");
fac.newDigestMethod(DigestMethod.SHA256, null);
XMLSignature signature = fac.unmarshalXMLSignature(valContext);
KeyInfo keyInfo = signature.getKeyInfo();
Iterator hKeyInfo = keyInfo.getContent().iterator();
while (hKeyInfo.hasNext()) {
XMLStructure hX509Data = (XMLStructure) hKeyInfo.next();
if (!(hX509Data instanceof X509Data)) {
continue;
}
X509Data x509Data = (X509Data) hX509Data;
Iterator hX509Certificate = x509Data.getContent().iterator();
while (hX509Certificate.hasNext()) {
Object oX509Certificate = hX509Certificate.next();
if (!(oX509Certificate instanceof X509Certificate)) {
continue;
}
x509Certificate = ((X509Certificate) oX509Certificate);
key = x509Certificate.getPublicKey();
}
}
//FileSystemDirectoryCertStore certStore = createDirectoryCertStore("my");
CertificateFactory cf = CertificateFactory.getInstance("X509");
ks.setCertificateEntry("df", x509Certificate);
CertificateValidationProvider validationProviderMySigs = new PKIXCertificateValidationProvider(ks, false, null);//certStore.getStore());
XadesVerificationProfile instance = new XadesVerificationProfile(validationProviderMySigs);
XadesVerifier verifier = instance.newVerifier();
XAdESVerificationResult r = verifier.verify(getSigElement(doc), null);
System.out.println(r.getSignatureForm());
System.out.println(r.getSignatureAlgorithmUri());
System.out.println(r.getSignedDataObjects().size());
System.out.println(r.getQualifyingProperties().all().size());
return false;
}
错误
Log Date Time:- 2017/06/08 14:38:01
xades4j.utils.XadesProfileResolutionException: com.google.inject.internal.ComputationException: java.lang.SecurityException: class "org.bouncycastle.cms.jcajce.JcaX509CertSelectorConverter"'s signer information does not match signer information of other classes in the same package
at xades4j.utils.XadesProfileCore.getInstance(XadesProfileCore.java:223)
at xades4j.verification.XadesVerificationProfile.newVerifier(XadesVerificationProfile.java:147)
at slr.DigitalVerification.VerifyXMLSign(DigitalVerification.java:163)
at slr.Handlers$OpenEVerifierHandler.handle(Handlers.java:186)
at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77)
at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83)
at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:80)
at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:677)
at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77)
at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:647)
at sun.net.httpserver.ServerImpl$DefaultExecutor.execute(ServerImpl.java:158)
at sun.net.httpserver.ServerImpl$Dispatcher.handle(ServerImpl.java:433)
at sun.net.httpserver.ServerImpl$Dispatcher.run(ServerImpl.java:398)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.google.inject.internal.ComputationException: ..........
我尝试了 https://github.com/luisgoncalves/xades4j/issues/37 中建议的方法但这也给出了同样的错误。
请指出我做错了什么。
最佳答案
从错误来看,它似乎与混淆安全提供程序有关,可能是因为您从“SunMSCAPI”创建了 KeyStore
,然后由使用的提供程序创建了 X509Certificate
在 XML 签名上,这似乎是充气城堡。
无论如何,由于签名证书包含在签名中,您不需要解析 XML 并查找它。 xades4j 的目的是让您远离那些东西。 xades4j 将收集 KeyInfo
中的所有证书,并在验证签名证书时使用它们构建链(在本例中可能只有一个)。
如果验证您的歌唱证书所需的所有中间证书和根证书都在 Windows-ROOT 或 KeyInfo
中,您只需创建受信任的根 KeyStore
并将其按原样传递给 PKIXCertificateValidationProvider
。如果需要包含其他证书,可以使用 PKIXCertificateValidationProvider
构造函数的 CertStore
参数。
因此,总而言之,您需要的所有代码都是第一部分和最后一部分。像这样的东西:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
Document doc = dbf.newDocumentBuilder().parse(isIn);
DOMHelper.useIdAsXmlId(doc.getDocumentElement());
KeyStore ks = KeyStore.getInstance("Windows-ROOT", "SunMSCAPI");
ks.load(null, null);
CertificateValidationProvider validationProviderMySigs = new PKIXCertificateValidationProvider(ks, false, null);
XadesVerificationProfile instance = new XadesVerificationProfile(validationProviderMySigs);
XadesVerifier verifier = instance.newVerifier();
XAdESVerificationResult r = verifier.verify(getSigElement(doc), null);
关于java - 嵌入 x509 证书的 xades4j 验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44432054/
我正在尝试验证由 xades4j 签名的文档,但我对证书验证不感兴趣。我唯一需要知道的是该文档已正确签署,并且自签署以来没有任何更改。 我尝试了几种不同的方法,但每种方法都使用 PKIXCertifi
Java 程序将 PDF 文档发送到外部系统并接收该文档的 XADES 标志。 我想检查 PDF 文档的哈希值是否与 Xades 符号中包含的哈希值匹配。所以我计算了PDF文档的SHA1,但它与ds:
我必须为一个项目创建我自己的 XAdES 签名,除了分离的签名之外,一切都工作正常。据我了解,我必须添加对 XML 对象的引用,该对象将指向存储原始文档的容器。我已经尝试使用 ResolverAnon
有了 XAdES-BES 签名,其中嵌入了签名内容,是否可以分离签名内容,以便拥有带有 ObjectReference 的 XAdES。 所以简单来说 - 我需要一种方法,它采用带有嵌入式文件的 XA
我正在尝试使用 xades4j 库使用分离的 XAdES 签名“test.zip.xades”来验证文件“test.zip”的完整性。我知道更简单的方法是使用 md5,但我需要使用 XAdES。我不想
我正在寻找与 microsoft.net 框架兼容的库,它允许创建和验证 XAdES 签名(XAdES、XAdES-C、XAdES-XL 等...)。 让程序员能够选择的库很重要: 1.- 签名过程中
我正在尝试通过2019-09-20T14:57:46到一个函数并使用根 中包含的数字签名对其进行签名标签 这是预期的结果: 2019-09-20T14:57:46
我是数字签名领域的新手。我想知道 CMS、CAdES_T、XAdES/XAdES_T、PAdES 文档是否都具有 .p7m 扩展名。如果是,我如何确定 .p7m 的签名类型?BouncyCaSTLe
我正在为使用 XAdES 的消息签名而苦恼。我已经搜索了将我带到下面代码的解决方案。但是我尝试连接的服务告诉我签名错误。我做错了什么? public static class Signature
我需要你的帮助:拜托,拜托。我有一个 Xades 签名的 XML 文档,我将其作为 byteArray 接收:所以我将我的 byteArray 转换为字符串。之后,我尝试解码以便获得映射的 Java
我们想创建一个验证“XADES”签名的 java web 应用程序,这个应用程序应该有两个文件:原始文件和他的分离签名。 我正在使用 XADES4j 库,这是一个很棒的项目。使用 XADES4j 有没
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
我需要使用 XAdES 模板签署 xml。我正在使用 2 个引用。第二个问题是,如果我添加 Transform,它将正常工作(signedXml.CheckSignature() 返回 True),如
我找不到任何理由说明为什么有人更愿意实现面向 CAdES 的电子签名软件解决方案而不是面向 XAdES 的电子签名软件解决方案。 互联网上有更多 XAdES 的开放库和实现案例和示例,但我仍然认为这不
我找到了 Xades Signature for Python GitHub。我的计划是将 Xades-EPES 签名应用于 XML 文件。根据 GitHub 的工作,它能够执行此过程,但我无法运行。
几天来,我一直在为如何计算 XAdES 签名中 SignedProperties 元素的摘要而苦苦思索。我有一个引用 XML 文件,其中计算了两个摘要值(正在签名的文件和已签名的属性),我知道它很好,
几天来,我一直在为如何计算 XAdES 签名中 SignedProperties 元素的摘要而苦苦思索。我有一个引用 XML 文件,其中计算了两个摘要值(正在签名的文件和已签名的属性),我知道它很好,
我正在尝试使用 XAdES4j 库通过封装签名对 xml 进行签名。从我读到的所有内容来看,似乎可以完全按照我想做的事情进行,但我无法找到一个简单的示例来帮助我更好地理解工作流程。该库位于此处: ht
我正在尝试在 Android 中使用 XADES-BES 签署文件。我找到了一个关于这个的图书馆。构建和创建 APK 工作正常。选择文件并单击“签名”按钮后,出现运行时错误。经过调试发现Context
我正在签署的文件看起来像这样。 我正在使用 xadesjs使用以下代码签署此 XML: const crypto = new Crypto(); xadesjs.Application.setE
我是一名优秀的程序员,十分优秀!