You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by bi...@apache.org on 2020/04/15 16:08:14 UTC
[axis-axis2-java-rampart] 06/09: Merge r1240268 from trunk.
This is an automated email from the ASF dual-hosted git repository.
billblough pushed a commit to branch RAMPART-252
in repository https://gitbox.apache.org/repos/asf/axis-axis2-java-rampart.git
commit b258a530dd3cd3c6bef1aba7ef0007168c968a48
Merge: 1d944fb c92232d
Author: Andreas Veithen <ve...@apache.org>
AuthorDate: Sun Jan 29 15:45:48 2017 +0000
Merge r1240268 from trunk.
.../ExtendedPolicyValidatorCallbackHandler.java | 24 +
.../rampart/PolicyBasedResultsValidator.java | 694 ++++++++++---------
.../java/org/apache/rampart/RampartConstants.java | 3 +
.../java/org/apache/rampart/RampartEngine.java | 33 +-
.../org/apache/rampart/RampartMessageData.java | 54 +-
.../org/apache/rampart/TokenCallbackHandler.java | 4 +-
.../rampart/builder/AsymmetricBindingBuilder.java | 238 ++++---
.../org/apache/rampart/builder/BindingBuilder.java | 318 +++++----
.../rampart/builder/SymmetricBindingBuilder.java | 152 +++--
.../rampart/builder/TransportBindingBuilder.java | 194 +++---
.../main/java/org/apache/rampart/errors.properties | 3 +
.../rampart/handler/CertificateValidator.java | 45 ++
.../handler/PostDispatchVerificationHandler.java | 4 +-
.../apache/rampart/handler/RampartReceiver.java | 10 +-
.../apache/rampart/handler/WSDoAllReceiver.java | 39 +-
.../org/apache/rampart/handler/WSDoAllSender.java | 27 +-
.../handler/config/InflowConfiguration.java | 21 +
.../handler/config/OutflowConfiguration.java | 21 +
.../apache/rampart/policy/RampartPolicyData.java | 62 +-
.../rampart/policy/model/OptimizePartsConfig.java | 11 +-
.../apache/rampart/saml/SAML1AssertionHandler.java | 12 +-
.../org/apache/rampart/util/MessageOptimizer.java | 25 +-
.../java/org/apache/rampart/util/RampartUtil.java | 750 ++++++++++++---------
.../src/main/java/org/apache/rahas/PWCallback.java | 14 +-
.../main/java/org/apache/rampart/PWCallback.java | 18 +-
.../apache/axis2/oasis/ping/PingPortSkeleton.java | 31 +-
.../axis2/security/InteropScenarioClient.java | 7 +-
.../src/org/apache/axis2/security/PWCallback.java | 10 +-
.../org/apache/axis2/security/Scenario4Test.java | 9 +-
.../org/apache/axis2/security/Scenario5Test.java | 4 +-
.../test/java/org/apache/rampart/RampartTest.java | 4 +-
.../src/test/resources/security/s2a.service.xml | 2 +-
.../test/resources/security/s4.client.axis2.xml | 5 +-
.../src/test/resources/security/s4.service.xml | 5 +-
.../test/resources/security/s5.client.axis2.xml | 4 +-
.../org/apache/rampart/MessageBuilderTestBase.java | 3 +-
.../java/org/apache/rampart/RampartEngineTest.java | 33 +-
.../java/org/apache/rampart/TestCBHandler.java | 44 +-
.../rampart-tests/test-resources/PWCallback.java | 8 +-
.../src/main/java/org/apache/rahas/RahasData.java | 31 +-
.../java/org/apache/rahas/client/STSClient.java | 30 +-
.../main/java/org/apache/rahas/errors.properties | 5 +-
.../org/apache/rahas/impl/SAML2TokenIssuer.java | 19 +-
.../org/apache/rahas/impl/SAMLTokenIssuer.java | 49 +-
.../apache/rahas/impl/SAMLTokenIssuerConfig.java | 11 +-
.../org/apache/rahas/impl/SAMLTokenRenewer.java | 11 +-
.../org/apache/rahas/impl/SAMLTokenValidator.java | 6 +-
.../org/apache/rahas/impl/TokenIssuerUtil.java | 13 +-
.../org/apache/rahas/impl/util/CommonUtil.java | 140 ++++
.../org/apache/rahas/impl/util/SAML2Utils.java | 13 +-
.../java/org/apache/rahas/impl/util/SAMLUtils.java | 22 +-
.../apache/rahas/impl/SAML2TokenIssuerTest.java | 73 ++
.../org/apache/rahas/impl/util/SAMLUtilsTest.java | 37 +-
.../java/org/apache/rahas/test/util/TestUtil.java | 61 ++
pom.xml | 22 +-
55 files changed, 2059 insertions(+), 1429 deletions(-)
diff --cc modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
index 9cd2a2b,774bf38..1eab066
--- a/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
@@@ -556,39 -561,12 +565,37 @@@ public class PolicyBasedResultsValidato
WSSecurityEngineResult[] actionResults = fetchActionResults(results, WSConstants.SIGN);
// Find elements that are signed
- Vector actuallySigned = new Vector();
+ List<QName> actuallySigned = new ArrayList<QName>();
- if (actionResults != null) {
+ if (actionResults != null) {
+
+ AlgorithmSuite suite = rpd.getAlgorithmSuite();
+
- for (int j = 0; j < actionResults.length; j++) {
-
- WSSecurityEngineResult actionResult = actionResults[j];
+ for (WSSecurityEngineResult actionResult : actionResults) {
+ // Validate signature algorithms
+ String sigMethod = null;
+ String canonMethod = null;
+ sigMethod = (String) actionResult.get(WSSecurityEngineResult.TAG_SIGNATURE_METHOD);
+ canonMethod = (String) actionResult
+ .get(WSSecurityEngineResult.TAG_CANONICALIZATION_METHOD);
+
+ if (sigMethod == null || canonMethod == null) {
+ throw new RampartException("algorithmNotFound");
+ }
+ // Check whether signature algorithm is correct
+ if (!(sigMethod.equals(suite.getAsymmetricSignature()) || sigMethod.equals(suite
+ .getSymmetricSignature()))) {
+ throw new RampartException("invalidAlgorithm", new String[] {
+ suite.getAsymmetricSignature(), sigMethod });
+ }
+ // Check whether the canonicalization algorithm is correct
+ if (!canonMethod.equals(suite.getInclusiveC14n())) {
+ throw new RampartException("invalidAlgorithm", new String[] {
+ suite.getInclusiveC14n(), canonMethod });
+ }
+
- List wsDataRefs = (List)actionResult.get(WSSecurityEngineResult.TAG_DATA_REF_URIS);
-
+ List wsDataRefs = (List) actionResult.get(WSSecurityEngineResult.TAG_DATA_REF_URIS);
+
// if header was encrypted before it was signed, protected
// element is 'EncryptedHeader.' the actual element is
// first child element
@@@ -995,29 -1012,13 +1041,29 @@@
.size()]);
}
+ private void validateEncryptionAlgorithm(ArrayList refList, AlgorithmSuite algorithmSuite) throws RampartException {
+
+ for (int i = 0; i < refList.size(); i++) {
+ WSDataRef dataRef = (WSDataRef) refList.get(i);
+
+ //ArrayList can contain null elements
+ if (dataRef == null) {
+ continue;
+ }
+
+ if (!(algorithmSuite.getEncryption().equals(dataRef.getAlgo()))) {
+ throw new RampartException("invalidAlgorithm", new String[]{algorithmSuite.getEncryption(), dataRef.getAlgo()});
+ }
+ }
+ }
+
private boolean isRefIdPresent(ArrayList refList , QName qname) {
-
- for (int i = 0; i < refList.size() ; i++) {
- WSDataRef dataRef = (WSDataRef)refList.get(i);
-
+
+ for (Object aRefList : refList) {
+ WSDataRef dataRef = (WSDataRef) aRefList;
+
//ArrayList can contain null elements
- if(dataRef == null) {
+ if (dataRef == null) {
continue;
}
//QName of the decrypted element
diff --cc modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java
index f8678de,acb2b73..7cc40d7
--- a/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java
@@@ -56,13 -53,8 +56,10 @@@ import org.w3c.dom.Element
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Vector;
+ import java.util.*;
+import javax.xml.stream.XMLStreamReader;
+
public class SymmetricBindingBuilder extends BindingBuilder {
@@@ -667,22 -655,13 +666,23 @@@
encr.setSymmetricEncAlgorithm(rpd.getAlgorithmSuite().getEncryption());
// Use key identifier in the KeyInfo in server side
if (!rmd.isInitiator()) {
- if(encrTok instanceof EncryptedKeyToken) {
+ if (encrTok instanceof EncryptedKeyToken) {
- encr.setUseKeyIdentifier(true);
+ // TODO was encr.setUseKeyIdentifier(true); verify
+ encr.setEncKeyIdDirectId(true);
- encr.setCustomReferenceValue(((EncryptedKeyToken)encrTok).getSHA1());
+ encr.setCustomReferenceValue(((EncryptedKeyToken) encrTok).getSHA1());
encr.setKeyIdentifierType(WSConstants.ENCRYPTED_KEY_SHA1_IDENTIFIER);
- }
+ }
+ } else if (isIssuedToken) {
+ encr.setUseKeyIdentifier(true);
+ encr.setCustomReferenceValue(encrTokId);
+ encr.setKeyIdentifierType(WSConstants.SAML_ASSERTION_IDENTIFIER);
+ try {
+ // RampartUtil.insertSiblingAfter(rmd,this.timestampElement,getLLOMfromOM(encrTok.getToken()));
+ } catch (Exception e) {
+ log.debug("error while converting SAML issued token to a dom element");
+ }
}
+
encr.prepare(doc, RampartUtil.getEncryptionCrypto(rpd
.getRampartConfig(), rmd.getCustomClassLoader()));
diff --cc modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
index f8ac898,8e188b1..65ee52e
--- a/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
@@@ -100,6 -102,5 +102,7 @@@ requiredElementsMissing = Required Elem
repeatingNonceValue = Nonce value : {0}, already seen before for user name : {1}. Possibly this could be a replay attack.
invalidNonceLifeTime = Invalid value for nonceLifeTime in rampart configuration file.
invalidIssuerAddress = Invalid value for Issuer
+algorithmNotFound = Couldn't find the algorithm used
+invalidAlgorithm = Algorithm verification failed. Required Algorithm : {0}, Algorithm found {1}
invalidSignatureAlgo=Invalid signature algorithm for Asymmetric binding
+