Author: nandana
Date: Wed Feb 25 06:21:49 2009
New Revision: 747676
URL: http://svn.apache.org/viewvc?rev=747676&view=rev
Log:
RAMPART-214 proper validationg for HTTPs token when we have clientAuth property
Modified:
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
Modified:
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java?rev=747676&r1=747675&r2=747676&view=diff
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
Wed Feb 25 06:21:49 2009
@@ -22,34 +22,17 @@
import org.apache.rampart.policy.RampartPolicyData;
import org.apache.rampart.util.RampartUtil;
import org.apache.ws.secpolicy.SPConstants;
-import org.apache.ws.secpolicy.model.HttpsToken;
-import org.apache.ws.secpolicy.model.IssuedToken;
-import org.apache.ws.secpolicy.model.SignedEncryptedParts;
-import org.apache.ws.secpolicy.model.SupportingToken;
-import org.apache.ws.secpolicy.model.Token;
-import org.apache.ws.secpolicy.model.UsernameToken;
-import org.apache.ws.secpolicy.model.X509Token;
-import org.apache.ws.security.SOAP11Constants;
-import org.apache.ws.security.SOAP12Constants;
-import org.apache.ws.security.WSConstants;
-import org.apache.ws.security.WSDataRef;
-import org.apache.ws.security.WSEncryptionPart;
-import org.apache.ws.security.WSSecurityEngineResult;
-import org.apache.ws.security.WSSecurityException;
+import org.apache.ws.secpolicy.model.*;
+import org.apache.ws.security.*;
import org.apache.ws.security.message.token.Timestamp;
import org.apache.ws.security.util.WSSecurityUtil;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
+import javax.xml.namespace.QName;
import java.math.BigInteger;
import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.Vector;
-
-import javax.xml.namespace.QName;
+import java.util.*;
public class PolicyBasedResultsValidator implements
PolicyValidatorCallbackHandler {
@@ -133,16 +116,6 @@
validateProtectionOrder(data, results);
}
- if(rpd.isTransportBinding() && !rmd.isInitiator()){
- if (rpd.getTransportToken() instanceof HttpsToken) {
- String incomingTransport =
rmd.getMsgContext().getIncomingTransportName();
-
if(!incomingTransport.equals(org.apache.axis2.Constants.TRANSPORT_HTTPS)){
- throw new RampartException("invalidTransport",
- new String[]{incomingTransport});
- }
- }
- }
-
validateEncryptedParts(data, encryptedParts, results);
validateSignedPartsHeaders(data, signatureParts, results);
Modified:
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java?rev=747676&r1=747675&r2=747676&view=diff
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
Wed Feb 25 06:21:49 2009
@@ -73,8 +73,11 @@
RampartPolicyData rpd = rmd.getPolicyData();
msgCtx.setProperty(RampartMessageData.RAMPART_POLICY_DATA, rpd);
-
- //If there is no policy information or if the message is a
security fault or no security
+
+ RampartUtil.validateTransport(rmd);
+
+
+ //If there is no policy information or if the message is a security
fault or no security
// header required by the policy
if(rpd == null || isSecurityFault(rmd) ||
!RampartUtil.isSecHeaderRequired(rpd,rmd.isInitiator(),true)) {
SOAPEnvelope env =
Axis2Util.getSOAPEnvelopeFromDOMDocument(rmd.getDocument(), true);
Modified:
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties?rev=747676&r1=747675&r2=747676&view=diff
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
(original)
+++
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
Wed Feb 25 06:21:49 2009
@@ -58,7 +58,6 @@
UnsupportedTokenInSupportingToken = Unsupported token in supporting tokens
encryptionTokenMissing = Encryption token missing
signatureTokenMissing = Signature token missing
-errorInEncryption = Error during encryption
sctIssuerPolicyMissing = sct-issuer-policy parameter missing
errorInTokenCancellation = Error in canceling token
tokenToBeCancelledInvalid = Token to be canceled is invalid or expired
@@ -69,6 +68,7 @@
rampartConigMissing = Please include configured RampartConfiguration assertion
in policy
missingSecurityHeader = Missing wsse:Security header in request
missingSOAPHeader = SOAP header missing
+clientAuthRequired= Service requires SSL mutual authentication
#Errors in processors
errorProcessingUT = Error in processing UsernameToken
Modified:
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java?rev=747676&r1=747675&r2=747676&view=diff
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
Wed Feb 25 06:21:49 2009
@@ -29,7 +29,6 @@
import org.apache.axiom.soap.SOAPHeaderBlock;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.AddressingConstants;
-import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.dataretrieval.DRConstants;
@@ -60,12 +59,7 @@
import org.apache.rampart.policy.model.CryptoConfig;
import org.apache.rampart.policy.model.RampartConfig;
import org.apache.ws.secpolicy.SPConstants;
-import org.apache.ws.secpolicy.model.IssuedToken;
-import org.apache.ws.secpolicy.model.SecureConversationToken;
-import org.apache.ws.secpolicy.model.SupportingToken;
-import org.apache.ws.secpolicy.model.Wss10;
-import org.apache.ws.secpolicy.model.Wss11;
-import org.apache.ws.secpolicy.model.X509Token;
+import org.apache.ws.secpolicy.model.*;
import org.apache.ws.security.WSConstants;
import org.apache.ws.security.WSEncryptionPart;
import org.apache.ws.security.WSPasswordCallback;
@@ -94,6 +88,7 @@
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.xml.namespace.QName;
+import javax.servlet.http.HttpServletRequest;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
@@ -1541,4 +1536,32 @@
}
+ public static void validateTransport(RampartMessageData rmd) throws
RampartException {
+
+ RampartPolicyData rpd = rmd.getPolicyData();
+
+ if (rpd == null) {
+ return;
+ }
+
+ if (rpd.isTransportBinding() && !rmd.isInitiator()) {
+ if (rpd.getTransportToken() instanceof HttpsToken) {
+ String incomingTransport =
rmd.getMsgContext().getIncomingTransportName();
+ if
(!incomingTransport.equals(org.apache.axis2.Constants.TRANSPORT_HTTPS)) {
+ throw new RampartException("invalidTransport",
+ new String[]{incomingTransport});
+ }
+ if (((HttpsToken)
rpd.getTransportToken()).isRequireClientCertificate()) {
+
+ MessageContext messageContext = rmd.getMsgContext();
+ HttpServletRequest request = ((HttpServletRequest)
messageContext.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST));
+ if (request == null ||
request.getAttribute("javax.servlet.request.X509Certificate") == null) {
+ throw new RampartException("clientAuthRequired");
+ }
+ }
+
+ }
+ }
+ }
+
}
\ No newline at end of file