Return-Path: X-Original-To: apmail-cxf-dev-archive@www.apache.org Delivered-To: apmail-cxf-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 60742D7B6 for ; Tue, 5 Mar 2013 12:58:45 +0000 (UTC) Received: (qmail 7614 invoked by uid 500); 5 Mar 2013 12:58:45 -0000 Delivered-To: apmail-cxf-dev-archive@cxf.apache.org Received: (qmail 5439 invoked by uid 500); 5 Mar 2013 12:58:38 -0000 Mailing-List: contact dev-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list dev@cxf.apache.org Received: (qmail 5405 invoked by uid 99); 5 Mar 2013 12:58:37 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 05 Mar 2013 12:58:37 +0000 X-ASF-Spam-Status: No, hits=2.2 required=5.0 tests=HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_NEUTRAL X-Spam-Check-By: apache.org Received-SPF: neutral (athena.apache.org: local policy) Received: from [209.85.160.41] (HELO mail-pb0-f41.google.com) (209.85.160.41) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 05 Mar 2013 12:58:32 +0000 Received: by mail-pb0-f41.google.com with SMTP id um15so4447931pbc.28 for ; Tue, 05 Mar 2013 04:58:11 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:x-received:x-originating-ip:in-reply-to:references :date:message-id:subject:from:to:content-type:x-gm-message-state; bh=V7omSCcJCZqom4+hiwaPqzK01UDB+LcE5VwStvTffXQ=; b=EJzQAkabJY//BsQOOKKfzI4tPBVDxGLQoscbyHc1+Ulbkp9AAd70wvcRb1cBT6AF+g rcV2qr7B85KVxvOeiEGmjJWsQSmab2JOWmFmcmAbcKqlL0ltrqfjSAPVL0Aj5kLbmjtD igVLT9NVpFjGoNnUgdRYe3+RJiUeCJThrCMhfMi7FaEMPuDiD2N6KnRCWtSIFNZP1Ev/ UUpC3YTUVBuRNYQURoLi9euh/UZXOmUVw6wL5BEhU2YrRYzE3vG/7YBpdqUwWdOaot2I 8/UwSMOozoBoelvMcyhB7pf1ofTP6Qcq2U5C48gNLxW5W52vracw8b/q80K/ZUPZFk7m HbvQ== MIME-Version: 1.0 X-Received: by 10.68.225.73 with SMTP id ri9mr37582435pbc.70.1362488291045; Tue, 05 Mar 2013 04:58:11 -0800 (PST) Received: by 10.68.62.2 with HTTP; Tue, 5 Mar 2013 04:58:10 -0800 (PST) X-Originating-IP: [193.176.222.61] In-Reply-To: References: Date: Tue, 5 Mar 2013 13:58:10 +0100 Message-ID: Subject: Re: WSRM in combination with WS-Security: timestamp problem From: John Li To: dev@cxf.apache.org Content-Type: multipart/alternative; boundary=e89a8ff2437d99ff6904d72d06da X-Gm-Message-State: ALoCoQmdIIpPEqu9ID9cH6kUBB3xcP1iavU6LxgozoArH9g410rXyzGaiZEqnAEUH8f0LDk5TYVW X-Virus-Checked: Checked by ClamAV on apache.org --e89a8ff2437d99ff6904d72d06da Content-Type: text/plain; charset=ISO-8859-1 Hi Aki Definitely an interesting suggestion. What we do now: - define a oneWayPing call with no response message - add wsrm - client installed on tomcat server will fire the oneWayPing call - createSequence is sent with replyTo en AckTo anonymous - acknowledgement are retrieved through piggybacking way only But with this approach, I assumed that the signatureConfirmation approach is not usefull since there is no response defined for the call. So instead of this way, I wanted to explore the following pattern: - define a twoWayPing call so with request and response message - add WSRM - client installed on Tomcat server will fire the twoWayPing call - createSequece is sent with replyTo en AckTo anonymous - twoPingCall will be sent after createSequence - twoPingCall will directly respond to the client a success message with signatureConfirmation and start a internal thread to do the real work (or better use message queue) - response will also contain the acknowledgements headers Now we force a direct response with signatureConfirmation so we can prove that the unchanged message is accepted by the receiver. The problem is that if we simulate a failure on the twoWayPing call, the client will directly get an exception that the message was not sent while WSRM will do resubmits. The second call is actually successful but the response is not processed by the source application since the thread is already gone. >>>That means, the signatureConfirmation is attached to each ack that confirms the delivery of the original request as well as its signature integrity. But nothing is forcing the server to always add an Ack to the response message right? It depends on the configuration and different implementations if they always directly respond with an ack header. I have configured my acknowledgement interval to be sent every 2 seconds so actually the acknowledgement of message1 is returned when the response of message2 is sent. Or am I missing something on this? I hope my explanation is still making a bit sense..... With kind regards, John On Mon, Mar 4, 2013 at 12:20 PM, Aki Yoshida wrote: > 2013/3/1 John Li : > > Hello Aki, > > > > I just created an issue for this problem: cxf-4866. Thanks! > > > > I have an additional issue with the usage of WSRM. Non-repudiation is an > > important security topic as well. By reading the specification, it seems > > that the element signatureConfirmation is an answer to this requirement. > > But it requires a response from the server. For this reason, we did a > > blocking call with WSRM support added but we run into the following > issue. > > > > If the Source application fires a blocking call, it will wait for > response > > from the server. Now in the case that the message was lost, WSRM will > > retransmit the message but the Source application is directly getting an > > error back from the RMS. This means that to the Source application it > seems > > that the call failed but the WSRM retransmit actually was successful. I > am > > wondering if this is by design or is this actually an bug? > > Hi John, > This is an interesting question. The use of signatureConfirmation in > WS-RM may only work in some specific cases. > I am not sure about your statement. What is exactly the call pattern > that you are using? Could it be that you are using a request-response > call with a synchronous anonymous response endpoint? If you use a > oneway call with a synchronous anonymous endpoint ack (i.e., each ack > returned in the http response per call), this combination may work. > That means, the signatureConfirmation is attached to each ack that > confirms the delivery of the original request as well as its signature > integrity. > Does this make sense? > thanks. > regards, aki > > > > > > On application level, this inconsistency can cause lots of problems. But > if > > we only do non-blocking calls with WSRM, it seems that we cannot use the > > signatureConfirmation element since it is provided through the response > of > > the original message. > > > > Any insight on this would be very much appreciated! > > > > With kind regards, > > John > > > > > > > > On Thu, Feb 28, 2013 at 4:30 PM, Aki Yoshida wrote: > > > >> Hi John, > >> there was some discussion on this topic at dev@cxf some years ago. But > >> there seems to be no jira ticket about it. > >> So if you can create one, that would be great. > >> > >> Thanks. > >> Regards, aki > >> > >> 2013/2/28 John Li : > >> > Hi Aki, > >> > > >> > Since it's a known limitation, is there maybe already an CXF issue > that > >> we > >> > can follow to keep track of the progress? It's great to hear that you > >> have > >> > a clear view on how to solve the issue. This issue is an important > >> blocker > >> > since for example the european standards mandates a reliable profile > >> where > >> > timestamps are required. This would mean that the cxf framework at the > >> > current moment cannot be used for those implementations. > >> > > >> > If there is anything you can see that I can help with the > implementation, > >> > just let me know. I will do my best. > >> > > >> > Regards, > >> > John > >> > > >> > > >> > > >> > On Thu, Feb 28, 2013 at 11:28 AM, Aki Yoshida > wrote: > >> > > >> >> 2013/2/28 John Li : > >> >> > Hi all, > >> >> > > >> >> > I have been working with the WSRM implementation of Apache CXF and > now > >> >> I'm > >> >> > combining it with WS-Security. After a struggle the createSequence > >> call > >> >> is > >> >> > successfully finished with WS-Security added but I am running into > a > >> >> > problem with the retransmission. If no acknowledgement is received, > >> the > >> >> RMS > >> >> > is retransmitting the message with the same timestamp which is > causing > >> >> > WS-Security to throw an error regarding a replay attack. > >> >> > > >> >> > After looking through the internet a bit I found the following post > >> >> > describing exactly the problem that I run into now and how it is > >> solved > >> >> in > >> >> > Axis2/Sandasha2/Rampart combination (http://wso2.org/library/1027 > ). > >> >> > > >> >> > Then I found the following post on the net where Dennis mentions > this > >> >> > problem to Aki ( > >> >> > > >> >> > >> > http://mail-archives.apache.org/mod_mbox/cxf-users/201103.mbox/%3C7b229db0-0865-47ec-8efe-2058b5808177@default%3E > >> >> > ) > >> >> > 'There are some deeper issues here around the way messages are > >> persisted. > >> >> > > >> >> > Right now the message is just captured as sent on the wire. This > works > >> >> > fine for plain messages, but once you add in WS-Security the > handling > >> >> > needs to change so that the security information (timestamps, in > >> >> > particular) can be updated for each retransmission. That's going to > >> >> > require intercepting the message at a different point in the > >> processing, > >> >> > and persisting in a different form.' > >> >> > > >> >> > In the documentation I found the following statement regarding the > >> >> control > >> >> > that we have on the order of interceptors. > >> >> > 'The RetransmissionIntercepor will be added on the fly by the > >> >> > RMOutInterceptor so need not appear in your configuration file.' > >> >> > > >> >> > Can maybe someone help me define if this issue has been sovled or > >> >> addressed > >> >> > in a CXF issue? Or is there some way to force the retransmission > >> >> > interceptor to go through the signing face again without creating > >> >> multiple > >> >> > signature elements like what the Axis2 solution had? > >> >> > >> >> > >> >> Hi John, > >> >> this is a known limitation for the current WS-RM implementation. To > >> >> solve this, we need to split the current processing chain in two > parts > >> >> so that we persist the plain message with the rm-props in the first > >> >> part and in the second part, we perform the rest of the processing > >> >> that includes an optional ws-sec processing and the final message > >> >> serialization and transmission. I was working on this some time ago > >> >> along with another change in the inbound side but somehow I was > >> >> interrupted with other stuff. > >> >> > >> >> A related limitation that could be solved with this change is the > >> >> create-sequence's transmission error handling. Currently, you get an > >> >> exception when the create sequence message fails. For some > >> >> applications, it would be nice to have this message also queued and > >> >> retried so that the application does not need to handle this > situation > >> >> using its own queuing. > >> >> > >> >> I'll try to close some of the things that I have next week. > >> >> > >> >> Regards, aki > >> >> > > >> >> > Any help is greatly appreciated. Many thanks in advance. > >> >> > > >> >> > With kind regards, > >> >> > John > >> >> > >> > --e89a8ff2437d99ff6904d72d06da--