[ 
https://issues.apache.org/jira/browse/WSS-721?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Colm O hEigeartaigh updated WSS-721:
------------------------------------
    Fix Version/s: 4.0.3

> Merlin Trust Optimization Request
> ---------------------------------
>
>                 Key: WSS-721
>                 URL: https://issues.apache.org/jira/browse/WSS-721
>             Project: WSS4J
>          Issue Type: Improvement
>          Components: WSS4J Core
>    Affects Versions: 3.0.4
>            Reporter: Richard Opalka
>            Assignee: Colm O hEigeartaigh
>            Priority: Major
>             Fix For: 4.0.3
>
>
> There is a problem during verification of signatures in incoming requests. 
> WSS4J first tries to lookup the certificate to verify in the configured 
> keystore and then in the truststore. This triggers an unnecessary remote call 
> since the trusted certificate will never be in the keystore. If the 
> operations were reversed (or better yet: the order was based on the whether 
> or not the certificate was to be used for trust or not) this remote call 
> could be avoided. It would be great if the lookup during the trust 
> verifiction would first be performed against the configured truststore.
> Below is a snippet from the stacktrace during verification of SAML Assertions:
>  
> {code:java}
> getCertificates:1012, Merlin (org.apache.wss4j.common.crypto)
> getX509Certificates:978, Merlin (org.apache.wss4j.common.crypto)
> getX509Certificates:565, Merlin (org.apache.wss4j.common.crypto)
> verifyTrust:769, Merlin (org.apache.wss4j.common.crypto)
> verifyTrust:906, Merlin (org.apache.wss4j.common.crypto)
> verifyTrustInCerts:109, SignatureTrustValidator 
> (org.apache.wss4j.dom.validate)
> validate:64, SignatureTrustValidator (org.apache.wss4j.dom.validate)
> verifySignedAssertion:215, SamlAssertionValidator 
> (org.apache.wss4j.dom.validate)
>  
> {code}
>  
> The code in question from org.apache.wss4j.common.crypto.Merlin:
>  
> {code:java}
> Certificate[] certs = null;
> if (keystore != null) {
>     certs = getCertificates(issuerName, serialNumber, keystore, false);
> }
> //If we can't find the issuer in the keystore then look at the truststore
> if ((certs == null || certs.length == 0) && truststore != null) {
>     certs = getCertificates(issuerName, serialNumber, truststore, true);
> } {code}
> https://github.com/apache/ws-wss4j/blob/3b840cecc2906ae0505598e914403d97d7615f2b/ws-security-common/src/main/java/org/apache/wss4j/common/crypto/Merlin.java#L977



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to