Hello guys,

I am a bit confused about how Timestamp validation for incoming messages 
work in WSS4J.

The current situation is that I have a CXF web service provider (WSS4J 
1.6.3) validating a timestamp on an incoming message, but failing even 
though the current date (on the server side) is right in the middle of 
the <wsu:CreatedDate /> and <wsu:ExpiryDate/> elements specified by the 
client. Here are the relevant parts from the logs (I added more debug 
messages):

2012-05-31 15:59:40.798 DEBUG SignatureProcessor:325 - Verify XML Signature
2012-05-31 15:59:40.808 DEBUG TimestampProcessor:43 - Found Timestamp 
list element
2012-05-31 15:59:40.808 DEBUG Timestamp:151 - Current time: 
2012-05-31T13:59:40.808Z
2012-05-31 15:59:40.809 DEBUG Timestamp:156 - Timestamp created: 
2012-05-31T13:53:26.226Z
2012-05-31 15:59:40.810 DEBUG Timestamp:162 - Timestamp expires: 
2012-05-31T14:53:26.226Z
2012-05-31 15:59:40.811 DEBUG TimestampProcessor:53 - Timestamp ID =[TS-1]
2012-05-31 15:59:40.811 DEBUG TimestampValidator:62 - wssConfig element 
exist, setting timestamp related values:
2012-05-31 15:59:40.812 DEBUG TimestampValidator:63 - timeStampStrict=[true]
2012-05-31 15:59:40.812 DEBUG TimestampValidator:65 - timeStampTTL=[300]
2012-05-31 15:59:40.813 DEBUG TimestampValidator:66 - futureTimeToLive=[60]
2012-05-31 15:59:40.813 DEBUG Timestamp:317 - verifyCreated() got 
values: ttl=[300], future ttl=[60]
2012-05-31 15:59:40.814 DEBUG Timestamp:340 - Validation of Timestamp: 
The message was created too long ago. 
createdDate=[2012-05-31T13:53:26.226Z], 
validCreation=[2012-05-31T13:54:40.808Z]
May 31, 2012 3:59:40 PM 
org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor handleMessage
WARNING:
org.apache.ws.security.WSSecurityException: The message has expired 
(WSSecurityEngine: Invalid timestamp The security semantics of the 
message have expired)

Looking at the code I can see that the default TTL (300) is being used 
to calculate the valid time for creation even though both the created 
and expiry times are set.
Is this behavior correct? Should the TTL not be ignored when validating 
incoming messages? I fail to see how TTL should play a part when doing 
this validation for the creation date of *incoming* messages.

Should the TTL play any part on the web service provider side (maybe to 
enforce a specific timeframe)?

The code in question:
[1] 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/validate/TimestampValidator.java?revision=1130107&view=markup
  
(line 60-65)
[2] 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/Timestamp.java?view=markup
 
(line 304-345)

I will create a JIRA for this if someone could just verify that what I 
am saying makes sense. :)

Thank you in advance.
---Jaco

-- 
Jaco van Tonder
Application Infrastructure: Analyst Programmer
First National Bank: Hogan Technology
3 First Place
Bank City
Corner Simmonds and Jeppe Streets
Johannesburg

Direct: +27 87 736 1790 :: Mobile: +27 83 417 5424
e-mail: jvanton...@fnb.co.za :: Web: http://www.fnb.co.za/
To read FirstRand Bank's Disclaimer for this email click on the following 
address or copy into your Internet browser: 
https://www.fnb.co.za/disclaimer.html 

If you are unable to access the Disclaimer, send a blank e-mail to
firstrandbankdisclai...@fnb.co.za and we will send you a copy of the Disclaimer.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@ws.apache.org
For additional commands, e-mail: dev-h...@ws.apache.org

Reply via email to