Re: Weird CSRF prevention behavior

2023-12-01 Thread Lasse Lindqvist
Well, one thing that could be wrong is that Log4j2 does not have FINE or
FINEST levels. It does have TRACE. If that does not fix things, you could
always  change tour log.trace to log.error if you only care about debugging
the original issue.

pe 1. jouluk. 2023 klo 22.28 Christopher Schultz (
ch...@christopherschultz.net) kirjoitti:

> All,
>
> I'm experimenting with the CsrfPreventionFilter in Tomcat 8.5. I've had
> issues with it in the past so I haven't actually enabled it in any of my
> applications, but I'm sufficiently motivated at this point to get it done.
>
> My "application" is actually split up into two applications, each
> running in a separate JVM but in the same URL space. I have a
> reverse-proxy that figures this all out and it's been working for years.
> I don't see why this wouldn't work.
>
> I have enabled CSRF prevention in Application A which is the "primary
> application" and the secondary application (Application B) is capable of
> mimicking/proxying the csrf token back to Application A.
>
> Application B has a feature where we present a web form to the user.
> It's fairly simple (paraphrasing):
>
> 
>
> 
>
> When I submit this form, I get an HTTP 403 response. Our application
> doesn't send 403 responses. When I remove the CsrfPreventionFilter from
> the configuration) by commenting-out the  in
> WEB-INF/web.xml, I do not get the 403 response and the form submission
> is successful. I'm sure that the CSRF token is *NOT* in the POST
> request: the browser shows me what is sent and it's not there. I have
> hacked the form and added the token, submitted it, and it /works/.
>
> But this is an HTTP POST and should be ignored by the filter.
>
> So I figure I'll enable logging and see what's happening. There isn't
> much logging in CsrfPreventionFilter, so I add this line to the
> beginning of the skipNonceCheck method:
>
>  log.trace("skipNonceCheck(" + request.getMethod() + " " +
> request.getRequestURI() + ")");
>
> I build-from-source and launch my custom-build Tomcat with my
> application in it. No logging. Oh, right... logging.properties. So I add
> this to my conf/logging.properties file:
>
> org.apache.catalina.filters.CsrfPreventionFilter.level = FINEST
>
> To be sure there's no funny business, I use "catalina.sh run" and wait
> for the console log to settle down. I make a few requests. No logs. Hmm.
> Oh, the ConsoleAppender is set to FINE and not FINEST.
>
> java.util.logging.ConsoleHandler.level = FINEST
>
> Done. CTRL-C, catalina.sh run. Make some requests.
>
> Nothing. Okay maybe the Filter is just ignoring these for some
> reason. So I add this line to the beginning of doFilter, before anything
> else happens:
>
>  log.trace("doFilter(" + request + ")");
>
> Re-build. CTRL-C. catalina.sh run. Make some requests.
>
> Nothing.
>
> The Filter is absolutely running. If I reload a page, the csrf tokens on
> all the links are changing. What's going on?
>
> You'd think a Tomcat committer could figure out how to make logging work.
>
> My application is using log4j2, but that library is only used by the
> application and the JAR file is in WEB-INF/lib/. I wouldn't expect that
> it would interfere with server-level logging.
>
> Any ideas? About EITHER issue? If anyone can help with logging, maybe I
> can figure out what's happening in the Filter. If you have any
> suggestions about the Filter, I'm al ears. HTTP POST should not be
> prohibited unless I'm reading both the code and the CSRF specs incorrectly.
>
> Thanks,
> -chris
>
> -
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>


Weird CSRF prevention behavior

2023-12-01 Thread Christopher Schultz

All,

I'm experimenting with the CsrfPreventionFilter in Tomcat 8.5. I've had 
issues with it in the past so I haven't actually enabled it in any of my 
applications, but I'm sufficiently motivated at this point to get it done.


My "application" is actually split up into two applications, each 
running in a separate JVM but in the same URL space. I have a 
reverse-proxy that figures this all out and it's been working for years. 
I don't see why this wouldn't work.


I have enabled CSRF prevention in Application A which is the "primary 
application" and the secondary application (Application B) is capable of 
mimicking/proxying the csrf token back to Application A.


Application B has a feature where we present a web form to the user. 
It's fairly simple (paraphrasing):



  


When I submit this form, I get an HTTP 403 response. Our application 
doesn't send 403 responses. When I remove the CsrfPreventionFilter from 
the configuration) by commenting-out the  in 
WEB-INF/web.xml, I do not get the 403 response and the form submission 
is successful. I'm sure that the CSRF token is *NOT* in the POST 
request: the browser shows me what is sent and it's not there. I have 
hacked the form and added the token, submitted it, and it /works/.


But this is an HTTP POST and should be ignored by the filter.

So I figure I'll enable logging and see what's happening. There isn't 
much logging in CsrfPreventionFilter, so I add this line to the 
beginning of the skipNonceCheck method:


log.trace("skipNonceCheck(" + request.getMethod() + " " + 
request.getRequestURI() + ")");


I build-from-source and launch my custom-build Tomcat with my 
application in it. No logging. Oh, right... logging.properties. So I add 
this to my conf/logging.properties file:


org.apache.catalina.filters.CsrfPreventionFilter.level = FINEST

To be sure there's no funny business, I use "catalina.sh run" and wait 
for the console log to settle down. I make a few requests. No logs. Hmm. 
Oh, the ConsoleAppender is set to FINE and not FINEST.


java.util.logging.ConsoleHandler.level = FINEST

Done. CTRL-C, catalina.sh run. Make some requests.

Nothing. Okay maybe the Filter is just ignoring these for some 
reason. So I add this line to the beginning of doFilter, before anything 
else happens:


log.trace("doFilter(" + request + ")");

Re-build. CTRL-C. catalina.sh run. Make some requests.

Nothing.

The Filter is absolutely running. If I reload a page, the csrf tokens on 
all the links are changing. What's going on?


You'd think a Tomcat committer could figure out how to make logging work.

My application is using log4j2, but that library is only used by the 
application and the JAR file is in WEB-INF/lib/. I wouldn't expect that 
it would interfere with server-level logging.


Any ideas? About EITHER issue? If anyone can help with logging, maybe I 
can figure out what's happening in the Filter. If you have any 
suggestions about the Filter, I'm al ears. HTTP POST should not be 
prohibited unless I'm reading both the code and the CSRF specs incorrectly.


Thanks,
-chris

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



Re: Tomcat 9 build from scratch

2023-12-01 Thread Christopher Schultz

Aditya,

On 12/1/23 12:48, Aditya Shastri wrote:

Yes. Equally importantly it also ensures that the code is compiled
against the Java 8 API.

>

Makes sense!


It is used for property replacement in the documentation for the minimum
Java version required at runtime. We do it this way so the documentation
source files can be the same for all Tomcat versions with the correct
minimum version being inserted via this property. It makes it a lot
easier when we start a new major version as we only have to change the
minimum version in one place rather than searching through the
documentation to find all the places that reference the minimum version.


That only happens during the `ant release` step? Doesn't really affect a
regular compile from source situation?


It actually happens when building the documentation. It has nothing to 
do with the source, which may be confusing if you are just reading the 
Ant property names. We probably could have chosen a better name for that 
property, or at least written a bit of documentation for it to make it 
clear.


-chris


On Fri, Dec 1, 2023, 3:41 AM Mark Thomas  wrote:


On 30/11/2023 23:38, Aditya Shastri wrote:

Thanks for the response Adwait.

My ant skills are lacking. Does the minimum bytecode definition come
from this line?



Yes. Equally importantly it also ensures that the code is compiled
against the Java 8 API.


What does this line do?



It is used for property replacement in the documentation for the minimum
Java version required at runtime. We do it this way so the documentation
source files can be the same for all Tomcat versions with the correct
minimum version being inserted via this property. It makes it a lot
easier when we start a new major version as we only have to change the
minimum version in one place rather than searching through the
documentation to find all the places that reference the minimum version.

Mark



On Thu, Nov 30, 2023 at 6:10 PM Adwait Kumar Singh 

wrote:


Yes, JDK17 can produce JDK8 bytecode, in fact that's what Tomcat does.

On Thu, Nov 30, 2023 at 2:35 PM Aditya Shastri <

aditya.shastri5...@gmail.com>

wrote:


Hello,

We build our own Tomcat 9 binaries from scratch (grab the tag from
https://github.com/apache/tomcat) and call ant (with java8) to build
it.

Starting with 9.0.83, our pipelines are failing with the error
build.xml:113: Java version 17 or newer is required (1.8.0_381 is
installed)

The apps we have are only certified on Java 8 and it would take a bit
of work to get it to Java 17.

My question is if I build the binaries with Java 17, can I still use
it with Java 8?

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




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



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






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



Re: Tomcat 9 build from scratch

2023-12-01 Thread Aditya Shastri
> Yes. Equally importantly it also ensures that the code is compiled
against the Java 8 API.
Makes sense!

> It is used for property replacement in the documentation for the minimum
Java version required at runtime. We do it this way so the documentation
source files can be the same for all Tomcat versions with the correct
minimum version being inserted via this property. It makes it a lot
easier when we start a new major version as we only have to change the
minimum version in one place rather than searching through the
documentation to find all the places that reference the minimum version.

That only happens during the `ant release` step? Doesn't really affect a
regular compile from source situation?

Thank you for your response!

On Fri, Dec 1, 2023, 3:41 AM Mark Thomas  wrote:

> On 30/11/2023 23:38, Aditya Shastri wrote:
> > Thanks for the response Adwait.
> >
> > My ant skills are lacking. Does the minimum bytecode definition come
> > from this line?
> > 
>
> Yes. Equally importantly it also ensures that the code is compiled
> against the Java 8 API.
>
> > What does this line do?
> >
>
> It is used for property replacement in the documentation for the minimum
> Java version required at runtime. We do it this way so the documentation
> source files can be the same for all Tomcat versions with the correct
> minimum version being inserted via this property. It makes it a lot
> easier when we start a new major version as we only have to change the
> minimum version in one place rather than searching through the
> documentation to find all the places that reference the minimum version.
>
> Mark
>
> >
> > On Thu, Nov 30, 2023 at 6:10 PM Adwait Kumar Singh 
> wrote:
> >>
> >> Yes, JDK17 can produce JDK8 bytecode, in fact that's what Tomcat does.
> >>
> >> On Thu, Nov 30, 2023 at 2:35 PM Aditya Shastri <
> aditya.shastri5...@gmail.com>
> >> wrote:
> >>
> >>> Hello,
> >>>
> >>> We build our own Tomcat 9 binaries from scratch (grab the tag from
> >>> https://github.com/apache/tomcat) and call ant (with java8) to build
> >>> it.
> >>>
> >>> Starting with 9.0.83, our pipelines are failing with the error
> >>> build.xml:113: Java version 17 or newer is required (1.8.0_381 is
> >>> installed)
> >>>
> >>> The apps we have are only certified on Java 8 and it would take a bit
> >>> of work to get it to Java 17.
> >>>
> >>> My question is if I build the binaries with Java 17, can I still use
> >>> it with Java 8?
> >>>
> >>> -
> >>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> >>> For additional commands, e-mail: users-h...@tomcat.apache.org
> >>>
> >>>
> >
> > -
> > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> > For additional commands, e-mail: users-h...@tomcat.apache.org
> >
>
> -
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>


Re: (No members active in cluster group) Cannot discover members in cluster using Delta Manager with static membership Unicast

2023-12-01 Thread Christopher Schultz

Peter,

On 12/1/23 10:12, l...@kreuser.name wrote:

Chuck,


Am 01.12.2023 um 16:07 schrieb Chuck Caldarale :



On Dec 1, 2023, at 02:27, Manak Bisht  wrote:

Hi, I am trying to implement non-sticky session replication using Delta
Manager with static membership. The nodes are across two different
machines. I am unable to discover members in the cluster with the following
logs on both machines -

org.apache.catalina.ha.session.DeltaManager.startInternal Register manager
localhost# to cluster element Engine with name Catalina
org.apache.catalina.ha.session.DeltaManager.startInternal Starting
clustering manager at localhost#
org.apache.catalina.ha.session.DeltaManager.getAllClusterSessions Manager
[localhost#]: skipping state transfer. No members active in cluster group.

Please find the cluster settings (inside the * *tag) below. I have
also added the * *tag to the *web.xml *files.

*Node_1*


  . . .


   
   


I’m not a clustering expert, but perhaps the address value needs to be an IP 
address accessible to the other machine in the cluster. The above 127.0.0.1 
(localhost) would appear to limit each receiver to the machine it’s running on.

The second node has the same issue.


NICE find!




-chris

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



Re: (No members active in cluster group) Cannot discover members in cluster using Delta Manager with static membership Unicast

2023-12-01 Thread Christopher Schultz

Manak,

On 12/1/23 03:27, Manak Bisht wrote:

Hi, I am trying to implement non-sticky session replication using Delta
Manager with static membership. The nodes are across two different
machines. 


This isn't really relevant to your issue, but I would *always* recommend 
enabling stickiness. Why? I'll tell you.


The DeltaManager (and really any clustered Manager) works by listening 
for HttpSessionAttributeListener events and, after a request has 
completed, distributing the changes to the session across all other 
cluster members.


You can almost think of it like an RDBMS transaction: INSERT, UPDATE, 
DELETE... then COMMIT. Not until the COMMIT will the rest of the cluster 
see the changes.


Your browser will happily make multiple simultaneous requests to a web 
service, so there can be multiple requests in flight at any one time. If 
these go to different servers in your cluster (because you have disabled 
stickiness), then two requests can be modifying the state of your users' 
sessions separately on any number of servers simultaneously, and 
independently of each other. You cannot predict which request will go 
where and when the replication from any source node will occur and take 
effect on any destination node.


The situation is sufficiently chaotic that something odd like this may 
affect a user:


1. They are looking at a view in your application
2. They choose a "change language" option that switches from e.g. 
English to e.g. French
3. The request from (2) above goes to Node X, and the session's locale 
changes from "en" to "fr", and the response includes a redirect e.g. 
"back to the same page you were just looking at"
4. The client follows the redirect, but hits Node Y in your cluster, 
which has not yet received the session-replication-event which includes 
the updated locale setting. The response is shown in English, because 
that's the value still in the user's session.
5. The user files a bug report, stating "When I changed language, the 
change didn't take effect until the SECOND request".
6. Nobody can replicate the problem in dev/testing because either the 
dev/test cluster is too fast or you don't bother with clustered sessions 
in dev/test.


If you enable stickiness, all requests will be delivered to the same 
server and the above situation is extraordinarily unlikely. The only 
time your user has to switch servers is if their primary node fails for 
some reason. When failover occurs, Strange Things are bound to happen 
for a variety of reasons, but those situations are unusual. If you 
disable stickiness, those Weird Things can literally happen with /every 
request/.


If you have a good reason to disable stickness, I'd love to hear the 
reasoning.


-chris

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



Re: (No members active in cluster group) Cannot discover members in cluster using Delta Manager with static membership Unicast

2023-12-01 Thread logo
Chuck,

> Am 01.12.2023 um 16:07 schrieb Chuck Caldarale :
> 
> 
>> On Dec 1, 2023, at 02:27, Manak Bisht  wrote:
>> 
>> Hi, I am trying to implement non-sticky session replication using Delta
>> Manager with static membership. The nodes are across two different
>> machines. I am unable to discover members in the cluster with the following
>> logs on both machines -
>> 
>> org.apache.catalina.ha.session.DeltaManager.startInternal Register manager
>> localhost# to cluster element Engine with name Catalina
>> org.apache.catalina.ha.session.DeltaManager.startInternal Starting
>> clustering manager at localhost#
>> org.apache.catalina.ha.session.DeltaManager.getAllClusterSessions Manager
>> [localhost#]: skipping state transfer. No members active in cluster group.
>> 
>> Please find the cluster settings (inside the * *tag) below. I have
>> also added the * *tag to the *web.xml *files.
>> 
>> *Node_1*
> 
>  . . .
> 
>>   
>>   > className="org.apache.catalina.tribes.transport.nio.NioReceiver"
>>   address="127.0.0.1"
>>   port="8090"
>>   autoBind="0"
>>   maxThreads="6”/>
> 
> 
> I’m not a clustering expert, but perhaps the address value needs to be an IP 
> address accessible to the other machine in the cluster. The above 127.0.0.1 
> (localhost) would appear to limit each receiver to the machine it’s running 
> on.
> 
> The second node has the same issue.

NICE find!

> 
>  - Chuck
> 


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



Re: (No members active in cluster group) Cannot discover members in cluster using Delta Manager with static membership Unicast

2023-12-01 Thread Chuck Caldarale

> On Dec 1, 2023, at 02:27, Manak Bisht  wrote:
> 
> Hi, I am trying to implement non-sticky session replication using Delta
> Manager with static membership. The nodes are across two different
> machines. I am unable to discover members in the cluster with the following
> logs on both machines -
> 
> org.apache.catalina.ha.session.DeltaManager.startInternal Register manager
> localhost# to cluster element Engine with name Catalina
> org.apache.catalina.ha.session.DeltaManager.startInternal Starting
> clustering manager at localhost#
> org.apache.catalina.ha.session.DeltaManager.getAllClusterSessions Manager
> [localhost#]: skipping state transfer. No members active in cluster group.
> 
> Please find the cluster settings (inside the * *tag) below. I have
> also added the * *tag to the *web.xml *files.
> 
> *Node_1*

  . . .

>
> className="org.apache.catalina.tribes.transport.nio.NioReceiver"
>address="127.0.0.1"
>port="8090"
>autoBind="0"
>maxThreads="6”/>


I’m not a clustering expert, but perhaps the address value needs to be an IP 
address accessible to the other machine in the cluster. The above 127.0.0.1 
(localhost) would appear to limit each receiver to the machine it’s running on.

The second node has the same issue.

  - Chuck



Re: Tracking keep alive connections

2023-12-01 Thread Christopher Schultz

Daniel,

On 12/1/23 00:09, Daniel Andres Pelaez Lopez wrote:

Christopher,

So... when a connection is established, save the current timestamp on

the connection. When it closes, take the delta of the
start-of-connection and end-of-connection, and add it to a bounded queue
(say, 100? 1000?) of most-recent-connection-lifetimes. Any time you
request the average from the bean, it does the math on the whole set?



That makes totally sense, any way to listen those events in Tomcat?


Not really. It's probably something that would have to be implemented 
internally to Tomcat. The trick is iterating over a list of samples 
while that list is being mutated.


I was just trying to understand what you were looking for.

-chris

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



Re: Ciphers Warning in logfile for Tomcat 8.5.96 (with Adoptium jdk-8.0.392.8-hotspot)

2023-12-01 Thread Markus Schlegel
Using embedded Tomcat, therefore no catalina.bat

Markus


Am Fr., 1. Dez. 2023 um 15:42 Uhr schrieb Mark Thomas :

> On 01/12/2023 14:29, Markus Schlegel wrote:
> > Hi Peter,
> > Thank you for your hint about "-Djdk.tls.ephemeralDHKeySize=2048".
> > I indeed did not knew that this option exists.
> > When I enable it, I get Grad "A" from SSLLabs while it still lists 8 weak
> > ciphers out of 12.
> >
> > Because I get to grade "A" with this setting, I can indeed use the
> default
> > ciphers settings from Tomcat again and as a consequence, the Warning will
> > not anymore appear in the log.
> >
> > Maybe Mark had that setting active too while doing his ssllab tests. This
> > would explain the difference in the results.
>
> Tomcat sets that by default in catalina.[sh|bat]
>
> > @Mark: You suggested that I shall check the OpenSSL version I use, but I
> do
> > not use OpenSSL at all. Just plain Java8 JSSE.
>
> Ack. My point re OpenSSL was to help get the ciphers strong to do what
> you wanted it to do.
>
> Mark
>
> >
> > Kind regards and thanks a lot for your valuable help,
> > Markus Schlegel
> >
> >
> > Am Fr., 1. Dez. 2023 um 14:09 Uhr schrieb :
> >
> >> Hi
> >>
> >>> Am 29.11.2023 um 11:46 schrieb Markus Schlegel :
> >>>
> >>> Hi,
> >>> This is a continuation of the discussion taken below
> >>> https://bz.apache.org/bugzilla/show_bug.cgi?id=67628 where I asked
> about
> >>> the following warning which appears in our log:
> >>>
> >>> (29.11.2023 09:53:14 org.apache.tomcat.util.net.SSLUtilBase getEnabled
> >>> WARNING T-19): Tomcat interprets the [ciphers] attribute in a manner
> >>> consistent with the latest OpenSSL development branch. Some of the
> >>> specified [ciphers] are not supported by the configured SSL engine for
> >> this
> >>> connector (which may use JSSE or an older OpenSSL version) and have
> been
> >>> skipped: [[TLS_DHE_PSK_WITH_AES_256_CCM, (... I am excluding 60 entries
> >>> here...), TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256]]
> >>>
> >>> After some discussion in the ASF bugzilla, Mark asked to move the
> >>> discussion about the default ciphers configuration into this users
> >>> mailing list.
> >>>
> >>> We explicitly set the ciphers configuration since the default config
> >>> which comes with Tomcat still includes the (normal) Diffie-Helman key
> >>> exchange algorithm which are considered to be insecure (but not the
> >>> ECDH's!). See https://weakdh.org/ for information about this.
> >>>
> >>> We can't turn off that warning without getting other drawbacks as long
> >>> as we use our custom ciphers configuration, which led "warnOnSkip"
> >>> being set to true in the respective code section.
> >>> Those skipped ciphers are of no interest for us or our customers since
> >>> they appear only because Tomcat - as of my understanding - uses the
> >>> ciphers-set from OpenSSL to build the complete list of theoretically
> >>> available ciphers.
> >>>
> >>> There is nothing wrong with our configuration, but having that warning
> >>> in the log will cause each and every customer asking us why this
> >>> warning ist there - since they will fear a configuration problem.
> >>>
> >>> One question now is, if the default configuration of the ciphers in
> >>> Tomcat 8.5.96 is still save or not.
> >>>
> >>> I have re-run https://www.ssllabs.com/ssltest against our server
> setup.
> >>> With the Tomcat default ciphers configuration
> >>> "HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!kRSA" I get grade "B"
> >>> because of the weak key exchange algorithm using DH. It lists 10 weak
> >>> ciphers out of 12.
> >>>
> >> Why are you saying that you get a weak Keyexchange with DH?  That is not
> >> per se the case. DH is still valid.
> >>
> >> Did you set -Djdk.tls.ephemeralDHKeySize=2048 as CATALINA_OPTS ?
> >>
> >>> If I run it with our configuration, which adds ":-DH:+ECDH", I get
> >>> Grade "A" with 4 weak ciphers out of 6.
> >>>
> >>> Changing the config to add ":-CBC" to the default config as suggested
> >>> by Mark in bugzilla does not have any effect. Still Grade B, 10 weak
> >>> out of 12. It seems to me that -CBC might not be a valid option at
> >>> all?
> >>>
> >>> Mark got different results when he run the ssllabs tests. That might
> >>> be caused by different TLS certificates used? I am using a certificate
> >>> created with a RSA-2048bits Key and SHA256withRSA signature algorithm.
> >>> No clue if this causes any difference to Mark's setup.
> >>>
> >>> Anyone which knows if and how the certificate influences the selection
> of
> >>> possible ciphers?
> >>
> >>
> >>> Anyone having similar problems?
> >>> Anyone successful in excluding all ciphers with "CBC" ?
> >>>
> >>
> >> In my case I was only successful to get the ciphers right by setting
> them
> >> manually:
> >>
> >>
> >>
> 

Re: Ciphers Warning in logfile for Tomcat 8.5.96 (with Adoptium jdk-8.0.392.8-hotspot)

2023-12-01 Thread Mark Thomas

On 01/12/2023 14:29, Markus Schlegel wrote:

Hi Peter,
Thank you for your hint about "-Djdk.tls.ephemeralDHKeySize=2048".
I indeed did not knew that this option exists.
When I enable it, I get Grad "A" from SSLLabs while it still lists 8 weak
ciphers out of 12.

Because I get to grade "A" with this setting, I can indeed use the default
ciphers settings from Tomcat again and as a consequence, the Warning will
not anymore appear in the log.

Maybe Mark had that setting active too while doing his ssllab tests. This
would explain the difference in the results.


Tomcat sets that by default in catalina.[sh|bat]


@Mark: You suggested that I shall check the OpenSSL version I use, but I do
not use OpenSSL at all. Just plain Java8 JSSE.


Ack. My point re OpenSSL was to help get the ciphers strong to do what 
you wanted it to do.


Mark



Kind regards and thanks a lot for your valuable help,
Markus Schlegel


Am Fr., 1. Dez. 2023 um 14:09 Uhr schrieb :


Hi


Am 29.11.2023 um 11:46 schrieb Markus Schlegel :

Hi,
This is a continuation of the discussion taken below
https://bz.apache.org/bugzilla/show_bug.cgi?id=67628 where I asked about
the following warning which appears in our log:

(29.11.2023 09:53:14 org.apache.tomcat.util.net.SSLUtilBase getEnabled
WARNING T-19): Tomcat interprets the [ciphers] attribute in a manner
consistent with the latest OpenSSL development branch. Some of the
specified [ciphers] are not supported by the configured SSL engine for

this

connector (which may use JSSE or an older OpenSSL version) and have been
skipped: [[TLS_DHE_PSK_WITH_AES_256_CCM, (... I am excluding 60 entries
here...), TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256]]

After some discussion in the ASF bugzilla, Mark asked to move the
discussion about the default ciphers configuration into this users
mailing list.

We explicitly set the ciphers configuration since the default config
which comes with Tomcat still includes the (normal) Diffie-Helman key
exchange algorithm which are considered to be insecure (but not the
ECDH's!). See https://weakdh.org/ for information about this.

We can't turn off that warning without getting other drawbacks as long
as we use our custom ciphers configuration, which led "warnOnSkip"
being set to true in the respective code section.
Those skipped ciphers are of no interest for us or our customers since
they appear only because Tomcat - as of my understanding - uses the
ciphers-set from OpenSSL to build the complete list of theoretically
available ciphers.

There is nothing wrong with our configuration, but having that warning
in the log will cause each and every customer asking us why this
warning ist there - since they will fear a configuration problem.

One question now is, if the default configuration of the ciphers in
Tomcat 8.5.96 is still save or not.

I have re-run https://www.ssllabs.com/ssltest against our server setup.
With the Tomcat default ciphers configuration
"HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!kRSA" I get grade "B"
because of the weak key exchange algorithm using DH. It lists 10 weak
ciphers out of 12.


Why are you saying that you get a weak Keyexchange with DH?  That is not
per se the case. DH is still valid.

Did you set -Djdk.tls.ephemeralDHKeySize=2048 as CATALINA_OPTS ?


If I run it with our configuration, which adds ":-DH:+ECDH", I get
Grade "A" with 4 weak ciphers out of 6.

Changing the config to add ":-CBC" to the default config as suggested
by Mark in bugzilla does not have any effect. Still Grade B, 10 weak
out of 12. It seems to me that -CBC might not be a valid option at
all?

Mark got different results when he run the ssllabs tests. That might
be caused by different TLS certificates used? I am using a certificate
created with a RSA-2048bits Key and SHA256withRSA signature algorithm.
No clue if this causes any difference to Mark's setup.

Anyone which knows if and how the certificate influences the selection of
possible ciphers?




Anyone having similar problems?
Anyone successful in excluding all ciphers with "CBC" ?



In my case I was only successful to get the ciphers right by setting them
manually:


ciphers="TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"

The result is A(+) and TLS is supported from Java 8, IE 11, iOS12.2,
Android 6, Chrome 79, Firefox 66, Safari 13.0, which seems to be sufficient
to me.

Maybe I could get even away from DH from the result of the client
simulations. In the end it's up to you if you prioritize 128 or 256bit
ciphers. BTW I use testssl.sh for local tests (and non 443 ports).

 From what I found elsewhere, ECDH+AES256:ECDH+AES128 are the culprits for
the CBCs.

Regards

Peter


Thanks,
Markus Schlegel








Re: Ciphers Warning in logfile for Tomcat 8.5.96 (with Adoptium jdk-8.0.392.8-hotspot)

2023-12-01 Thread Markus Schlegel
Hi Peter,
Thank you for your hint about "-Djdk.tls.ephemeralDHKeySize=2048".
I indeed did not knew that this option exists.
When I enable it, I get Grad "A" from SSLLabs while it still lists 8 weak
ciphers out of 12.

Because I get to grade "A" with this setting, I can indeed use the default
ciphers settings from Tomcat again and as a consequence, the Warning will
not anymore appear in the log.

Maybe Mark had that setting active too while doing his ssllab tests. This
would explain the difference in the results.
@Mark: You suggested that I shall check the OpenSSL version I use, but I do
not use OpenSSL at all. Just plain Java8 JSSE.

Kind regards and thanks a lot for your valuable help,
Markus Schlegel


Am Fr., 1. Dez. 2023 um 14:09 Uhr schrieb :

> Hi
>
> > Am 29.11.2023 um 11:46 schrieb Markus Schlegel :
> >
> > Hi,
> > This is a continuation of the discussion taken below
> > https://bz.apache.org/bugzilla/show_bug.cgi?id=67628 where I asked about
> > the following warning which appears in our log:
> >
> > (29.11.2023 09:53:14 org.apache.tomcat.util.net.SSLUtilBase getEnabled
> > WARNING T-19): Tomcat interprets the [ciphers] attribute in a manner
> > consistent with the latest OpenSSL development branch. Some of the
> > specified [ciphers] are not supported by the configured SSL engine for
> this
> > connector (which may use JSSE or an older OpenSSL version) and have been
> > skipped: [[TLS_DHE_PSK_WITH_AES_256_CCM, (... I am excluding 60 entries
> > here...), TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256]]
> >
> > After some discussion in the ASF bugzilla, Mark asked to move the
> > discussion about the default ciphers configuration into this users
> > mailing list.
> >
> > We explicitly set the ciphers configuration since the default config
> > which comes with Tomcat still includes the (normal) Diffie-Helman key
> > exchange algorithm which are considered to be insecure (but not the
> > ECDH's!). See https://weakdh.org/ for information about this.
> >
> > We can't turn off that warning without getting other drawbacks as long
> > as we use our custom ciphers configuration, which led "warnOnSkip"
> > being set to true in the respective code section.
> > Those skipped ciphers are of no interest for us or our customers since
> > they appear only because Tomcat - as of my understanding - uses the
> > ciphers-set from OpenSSL to build the complete list of theoretically
> > available ciphers.
> >
> > There is nothing wrong with our configuration, but having that warning
> > in the log will cause each and every customer asking us why this
> > warning ist there - since they will fear a configuration problem.
> >
> > One question now is, if the default configuration of the ciphers in
> > Tomcat 8.5.96 is still save or not.
> >
> > I have re-run https://www.ssllabs.com/ssltest against our server setup.
> > With the Tomcat default ciphers configuration
> > "HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!kRSA" I get grade "B"
> > because of the weak key exchange algorithm using DH. It lists 10 weak
> > ciphers out of 12.
> >
> Why are you saying that you get a weak Keyexchange with DH?  That is not
> per se the case. DH is still valid.
>
> Did you set -Djdk.tls.ephemeralDHKeySize=2048 as CATALINA_OPTS ?
>
> > If I run it with our configuration, which adds ":-DH:+ECDH", I get
> > Grade "A" with 4 weak ciphers out of 6.
> >
> > Changing the config to add ":-CBC" to the default config as suggested
> > by Mark in bugzilla does not have any effect. Still Grade B, 10 weak
> > out of 12. It seems to me that -CBC might not be a valid option at
> > all?
> >
> > Mark got different results when he run the ssllabs tests. That might
> > be caused by different TLS certificates used? I am using a certificate
> > created with a RSA-2048bits Key and SHA256withRSA signature algorithm.
> > No clue if this causes any difference to Mark's setup.
> >
> > Anyone which knows if and how the certificate influences the selection of
> > possible ciphers?
>
>
> > Anyone having similar problems?
> > Anyone successful in excluding all ciphers with "CBC" ?
> >
>
> In my case I was only successful to get the ciphers right by setting them
> manually:
>
>
> ciphers="TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"
>
> The result is A(+) and TLS is supported from Java 8, IE 11, iOS12.2,
> Android 6, Chrome 79, Firefox 66, Safari 13.0, which seems to be sufficient
> to me.
>
> Maybe I could get even away from DH from the result of the client
> simulations. In the end it's up to you if you prioritize 128 or 256bit
> ciphers. BTW I use testssl.sh for local tests (and non 443 ports).
>
> From what I found elsewhere, ECDH+AES256:ECDH+AES128 are the culprits for
> the CBCs.
>
> Regards
>
> Peter
>
> > Thanks,

Re: Ciphers Warning in logfile for Tomcat 8.5.96 (with Adoptium jdk-8.0.392.8-hotspot)

2023-12-01 Thread logo
Hi

> Am 29.11.2023 um 11:46 schrieb Markus Schlegel :
> 
> Hi,
> This is a continuation of the discussion taken below
> https://bz.apache.org/bugzilla/show_bug.cgi?id=67628 where I asked about
> the following warning which appears in our log:
> 
> (29.11.2023 09:53:14 org.apache.tomcat.util.net.SSLUtilBase getEnabled
> WARNING T-19): Tomcat interprets the [ciphers] attribute in a manner
> consistent with the latest OpenSSL development branch. Some of the
> specified [ciphers] are not supported by the configured SSL engine for this
> connector (which may use JSSE or an older OpenSSL version) and have been
> skipped: [[TLS_DHE_PSK_WITH_AES_256_CCM, (... I am excluding 60 entries
> here...), TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256]]
> 
> After some discussion in the ASF bugzilla, Mark asked to move the
> discussion about the default ciphers configuration into this users
> mailing list.
> 
> We explicitly set the ciphers configuration since the default config
> which comes with Tomcat still includes the (normal) Diffie-Helman key
> exchange algorithm which are considered to be insecure (but not the
> ECDH's!). See https://weakdh.org/ for information about this.
> 
> We can't turn off that warning without getting other drawbacks as long
> as we use our custom ciphers configuration, which led "warnOnSkip"
> being set to true in the respective code section.
> Those skipped ciphers are of no interest for us or our customers since
> they appear only because Tomcat - as of my understanding - uses the
> ciphers-set from OpenSSL to build the complete list of theoretically
> available ciphers.
> 
> There is nothing wrong with our configuration, but having that warning
> in the log will cause each and every customer asking us why this
> warning ist there - since they will fear a configuration problem.
> 
> One question now is, if the default configuration of the ciphers in
> Tomcat 8.5.96 is still save or not.
> 
> I have re-run https://www.ssllabs.com/ssltest against our server setup.
> With the Tomcat default ciphers configuration
> "HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!kRSA" I get grade "B"
> because of the weak key exchange algorithm using DH. It lists 10 weak
> ciphers out of 12.
> 
Why are you saying that you get a weak Keyexchange with DH?  That is not per se 
the case. DH is still valid.

Did you set -Djdk.tls.ephemeralDHKeySize=2048 as CATALINA_OPTS ?

> If I run it with our configuration, which adds ":-DH:+ECDH", I get
> Grade "A" with 4 weak ciphers out of 6.
> 
> Changing the config to add ":-CBC" to the default config as suggested
> by Mark in bugzilla does not have any effect. Still Grade B, 10 weak
> out of 12. It seems to me that -CBC might not be a valid option at
> all?
> 
> Mark got different results when he run the ssllabs tests. That might
> be caused by different TLS certificates used? I am using a certificate
> created with a RSA-2048bits Key and SHA256withRSA signature algorithm.
> No clue if this causes any difference to Mark's setup.
> 
> Anyone which knows if and how the certificate influences the selection of
> possible ciphers?


> Anyone having similar problems?
> Anyone successful in excluding all ciphers with "CBC" ?
> 

In my case I was only successful to get the ciphers right by setting them 
manually:

ciphers="TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"

The result is A(+) and TLS is supported from Java 8, IE 11, iOS12.2, Android 6, 
Chrome 79, Firefox 66, Safari 13.0, which seems to be sufficient to me.

Maybe I could get even away from DH from the result of the client simulations. 
In the end it's up to you if you prioritize 128 or 256bit ciphers. BTW I use 
testssl.sh for local tests (and non 443 ports). 

From what I found elsewhere, ECDH+AES256:ECDH+AES128 are the culprits for the 
CBCs.

Regards

Peter

> Thanks,
> Markus Schlegel



Re: (No members active in cluster group) Cannot discover members in cluster using Delta Manager with static membership Unicast

2023-12-01 Thread Manak Bisht
Sorry, I forgot to mention, but I am using Tomcat 8.5

Sincerely
Manak Bisht

On Fri, Dec 1, 2023 at 3:40 PM Manak Bisht  wrote:

> Thanks for the reply Mark.
>
> The channelStartOptions setting is from the documentation
> https://tomcat.apache.org/tomcat-8.5-doc/config/cluster.html
> *"To start a channel without multicasting, you would want to use the value
> Channel.SND_RX_SEQ | Channel.SND_TX_SEQ that equals to 3. "*
>
> This configuration is working fine when both nodes are on the same local
> machine (with different ports). It's on the multi machine setup that I am
> facing a problem. Pinging the other machines is fine from both nodes, so it
> should not be a networking issue.
>
> Also, the documentation also says that the *distributable *tag is
> deprecated and ignored since Tomcat 8 (
> https://tomcat.apache.org/migration-9)
> *"The distributable attribute has been deprecated in 8.0 and specified
> value is ignored."*
>
> Sincerely
> Manak Bisht
>
> On Fri, Dec 1, 2023 at 2:21 PM Mark Thomas  wrote:
>
>> On 01/12/2023 08:27, Manak Bisht wrote:
>> > Hi, I am trying to implement non-sticky session replication using Delta
>> > Manager with static membership. The nodes are across two different
>> > machines. I am unable to discover members in the cluster with the
>> following
>> > logs on both machines -
>> >
>> > org.apache.catalina.ha.session.DeltaManager.startInternal Register
>> manager
>> > localhost# to cluster element Engine with name Catalina
>> > org.apache.catalina.ha.session.DeltaManager.startInternal Starting
>> > clustering manager at localhost#
>> > org.apache.catalina.ha.session.DeltaManager.getAllClusterSessions
>> Manager
>> > [localhost#]: skipping state transfer. No members active in cluster
>> group.
>> >
>> >   Please find the cluster settings (inside the * *tag) below. I
>> have
>> > also added the * *tag to the *web.xml *files.
>> >
>> > *Node_1*
>> > > >  channelSendOptions="6" channelStartOptions="3">
>>
>> Why channelStartOptions=3 ? I think this shoudl use the default.
>>
>> >  > >  expireSessionsOnShutdown="false"
>> > notifyListenersOnReplication="true"/>
>>
>> Minor point but I try not to define values that are using the defaults
>> so I cam more easily see the 'interesting' settings.
>>
>> 
>>
>> > What am I doing wrong here? Any help would be greatly appreciated.
>>
>> Nothing else jumps out at me immediately.
>>
>> Mark
>>
>> -
>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>
>>


Re: (No members active in cluster group) Cannot discover members in cluster using Delta Manager with static membership Unicast

2023-12-01 Thread Manak Bisht
Thanks for the reply Mark.

The channelStartOptions setting is from the documentation
https://tomcat.apache.org/tomcat-8.5-doc/config/cluster.html
*"To start a channel without multicasting, you would want to use the value
Channel.SND_RX_SEQ | Channel.SND_TX_SEQ that equals to 3. "*

This configuration is working fine when both nodes are on the same local
machine (with different ports). It's on the multi machine setup that I am
facing a problem. Pinging the other machines is fine from both nodes, so it
should not be a networking issue.

Also, the documentation also says that the *distributable *tag is
deprecated and ignored since Tomcat 8 (https://tomcat.apache.org/migration-9
)
*"The distributable attribute has been deprecated in 8.0 and specified
value is ignored."*

Sincerely
Manak Bisht

On Fri, Dec 1, 2023 at 2:21 PM Mark Thomas  wrote:

> On 01/12/2023 08:27, Manak Bisht wrote:
> > Hi, I am trying to implement non-sticky session replication using Delta
> > Manager with static membership. The nodes are across two different
> > machines. I am unable to discover members in the cluster with the
> following
> > logs on both machines -
> >
> > org.apache.catalina.ha.session.DeltaManager.startInternal Register
> manager
> > localhost# to cluster element Engine with name Catalina
> > org.apache.catalina.ha.session.DeltaManager.startInternal Starting
> > clustering manager at localhost#
> > org.apache.catalina.ha.session.DeltaManager.getAllClusterSessions Manager
> > [localhost#]: skipping state transfer. No members active in cluster
> group.
> >
> >   Please find the cluster settings (inside the * *tag) below. I
> have
> > also added the * *tag to the *web.xml *files.
> >
> > *Node_1*
> >  >  channelSendOptions="6" channelStartOptions="3">
>
> Why channelStartOptions=3 ? I think this shoudl use the default.
>
> >   >  expireSessionsOnShutdown="false"
> > notifyListenersOnReplication="true"/>
>
> Minor point but I try not to define values that are using the defaults
> so I cam more easily see the 'interesting' settings.
>
> 
>
> > What am I doing wrong here? Any help would be greatly appreciated.
>
> Nothing else jumps out at me immediately.
>
> Mark
>
> -
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>


Re: (No members active in cluster group) Cannot discover members in cluster using Delta Manager with static membership Unicast

2023-12-01 Thread Mark Thomas

On 01/12/2023 08:27, Manak Bisht wrote:

Hi, I am trying to implement non-sticky session replication using Delta
Manager with static membership. The nodes are across two different
machines. I am unable to discover members in the cluster with the following
logs on both machines -

org.apache.catalina.ha.session.DeltaManager.startInternal Register manager
localhost# to cluster element Engine with name Catalina
org.apache.catalina.ha.session.DeltaManager.startInternal Starting
clustering manager at localhost#
org.apache.catalina.ha.session.DeltaManager.getAllClusterSessions Manager
[localhost#]: skipping state transfer. No members active in cluster group.

  Please find the cluster settings (inside the * *tag) below. I have
also added the * *tag to the *web.xml *files.

*Node_1*



Why channelStartOptions=3 ? I think this shoudl use the default.


 


Minor point but I try not to define values that are using the defaults 
so I cam more easily see the 'interesting' settings.





What am I doing wrong here? Any help would be greatly appreciated.


Nothing else jumps out at me immediately.

Mark

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



Re: Tomcat 9 build from scratch

2023-12-01 Thread Mark Thomas

On 30/11/2023 23:38, Aditya Shastri wrote:

Thanks for the response Adwait.

My ant skills are lacking. Does the minimum bytecode definition come
from this line?



Yes. Equally importantly it also ensures that the code is compiled 
against the Java 8 API.



What does this line do?
   


It is used for property replacement in the documentation for the minimum 
Java version required at runtime. We do it this way so the documentation 
source files can be the same for all Tomcat versions with the correct 
minimum version being inserted via this property. It makes it a lot 
easier when we start a new major version as we only have to change the 
minimum version in one place rather than searching through the 
documentation to find all the places that reference the minimum version.


Mark



On Thu, Nov 30, 2023 at 6:10 PM Adwait Kumar Singh  wrote:


Yes, JDK17 can produce JDK8 bytecode, in fact that's what Tomcat does.

On Thu, Nov 30, 2023 at 2:35 PM Aditya Shastri 
wrote:


Hello,

We build our own Tomcat 9 binaries from scratch (grab the tag from
https://github.com/apache/tomcat) and call ant (with java8) to build
it.

Starting with 9.0.83, our pipelines are failing with the error
build.xml:113: Java version 17 or newer is required (1.8.0_381 is
installed)

The apps we have are only certified on Java 8 and it would take a bit
of work to get it to Java 17.

My question is if I build the binaries with Java 17, can I still use
it with Java 8?

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




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



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



(No members active in cluster group) Cannot discover members in cluster using Delta Manager with static membership Unicast

2023-12-01 Thread Manak Bisht
Hi, I am trying to implement non-sticky session replication using Delta
Manager with static membership. The nodes are across two different
machines. I am unable to discover members in the cluster with the following
logs on both machines -

org.apache.catalina.ha.session.DeltaManager.startInternal Register manager
localhost# to cluster element Engine with name Catalina
org.apache.catalina.ha.session.DeltaManager.startInternal Starting
clustering manager at localhost#
org.apache.catalina.ha.session.DeltaManager.getAllClusterSessions Manager
[localhost#]: skipping state transfer. No members active in cluster group.

 Please find the cluster settings (inside the * *tag) below. I have
also added the * *tag to the *web.xml *files.

*Node_1*


























*Node_2*



























What am I doing wrong here? Any help would be greatly appreciated.

Sincerely
Manak Bisht