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