OpenSAML-Signierung mit Azure Key Vault unter Verwendung des KeyVaultJcaProvider von Azure: engineInitSign() wird nicht Java

Java-Forum
Anonymous
 OpenSAML-Signierung mit Azure Key Vault unter Verwendung des KeyVaultJcaProvider von Azure: engineInitSign() wird nicht

Post by Anonymous »

Ich versuche, die OpenSAML-Antwort mit Azure KeyVault zu signieren, aber das Standardverhalten von Keyvault erlaubt es mir nicht, die Nutzlast zu signieren, da KeyVaultJcaProvider KeyVaultKeylessRsa256Signature für die Signatur „SHA256withRSA“ hat.
Es gibt keine einfachen Möglichkeiten, dieses Verhalten in KeyVaultJcaProvider zu überschreiben
Idealerweise d Ich möchte den Dienst wie folgt festlegen, sodass OpenSAML Signer RSASignature ohne Verwendung von KeyVaultKeylessRsa256Signature verwendet, aber ich habe keine Möglichkeit gefunden, dies zu erzwingen.

Code: Select all

putService ("Signature.SHA256withRSA","sun.security.rsa.RSASignature$SHA256withRSA")
Gibt es alternativ eine einfachere Möglichkeit, eine SAML mit OpenSAML zu signieren, indem der JCAProvider übergeben wird?
Ich habe Folgendes in meinem Code:
Application.java

Code: Select all

Security.insertProviderAt(new KeyVaultJcaProvider(), 1); // working as expected
SpringApplication.run(Application.class, args);
Konfiguration, die die Signaturanmeldeinformationen als BasicX509Certificate festlegt

Code: Select all

@Bean
public Credential samlCredential(...) { // working as expected
...

X509Certificate certificate = (X509Certificate) keyStore.getCertificate(alias);
PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, password.toCharArray());

BasicX509Credential credential = new BasicX509Credential(certificate);
credential.setPrivateKey(privateKey);

return credential;
}
SAML-Code >>

Code: Select all

samlObject.setSignature(signature);

XMLObjectProviderRegistrySupport.getMarshallerFactory()
.getMarshaller(samlObject)
.marshall(samlObject);

Signer.signObject(signature); // BREAKS because of the JCA returning AzureKeyLessSignature which doesnt work with OpenSAML (I think?)
Dies ist der Fehler-Stack-Trace:

Code: Select all

engineInitSign() not supported which private key is not instance of KeyVaultPrivateKey
at com.azure.security.keyvault.jca.implementation.signature.AbstractKeyVaultKeylessSignature.engineInitSign(AbstractKeyVaultKeylessSignature.java:77)
at com.azure.security.keyvault.jca.implementation.signature.AbstractKeyVaultKeylessSignature.engineInitSign(AbstractKeyVaultKeylessSignature.java:83)
at java.base/java.security.Signature$Delegate.engineInitSign(Signature.java:1357)
at java.base/java.security.Signature.initSign(Signature.java:636)
at org.apache.xml.security.algorithms.SignatureAlgorithmSpi.engineInitSign(SignatureAlgorithmSpi.java:212)
at org.apache.xml.security.algorithms.implementations.SignatureBaseRSA.engineInitSign(SignatureBaseRSA.java:130)
at org.apache.xml.security.algorithms.implementations.SignatureBaseRSA.engineInitSign(SignatureBaseRSA.java:136)
at org.apache.xml.security.algorithms.SignatureAlgorithm.initSign(SignatureAlgorithm.java:273)
at org.apache.xml.security.signature.XMLSignature.sign(XMLSignature.java:793)
at org.opensaml.xmlsec.signature.support.impl.provider.ApacheSantuarioSignerProviderImpl.signObject(ApacheSantuarioSignerProviderImpl.java:59)
at org.opensaml.xmlsec.signature.support.Signer.signObject(Signer.java:76)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post