仅使用公钥(OpenSAML)对数据进行Java签名



因此,我们得到了一个公共 X509 证书,我需要使用它来签署 SAML 断言

这是我目前拥有的:

BasicX509Credential credential = new BasicX509Credential();
credential.setEntityCertificate(getPublicCertificate());
credential.setPrivateKey(null);
// SIGNING
SecurityConfiguration config = Configuration.getGlobalSecurityConfiguration();
Signature signature = (Signature) Configuration.getBuilderFactory().getBuilder(Signature.DEFAULT_ELEMENT_NAME).buildObject(Signature.DEFAULT_ELEMENT_NAME);
signature.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
signature.setSigningCredential(credential);
SecurityHelper.prepareSignatureParams(signature, credential, config, null);
assertion.setSignature(signature);
// END SIGNING
AssertionMarshaller marshaller = new AssertionMarshaller();
Element plaintextElement = marshaller.marshall(assertion);
Signer.signObject(signature);

但是,当调用Signer.signObject(signature)时,它会引发NullPointerException,因为凭据对象中没有私钥。由于我们获得了 X509 证书,因此我们显然只能访问公钥。私钥应该设置为什么?谢谢!

您需要私钥才能签名。签名生成始终需要私钥,验证受信任的公钥(执行签名的一方(。

因此,也许除了getPublicCertificate之外,您还可以调用一种方法,或者私钥以其他方式传递。

从公钥中生成私钥当然是不可能的;如果可能的话,私钥的使用很少,而且它们不会非常私密。

相关内容

  • 没有找到相关文章

最新更新