Hi Chris,
If we create new java.filter as below then we can redirect the urls  ?

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebFilter("/*")
public class UrlRedirectionFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;

        String requestUrl = httpRequest.getRequestURL().toString();

        // Check if the request URL matches the target URL
        if (requestUrl.equals("https://example.lbg.com";)) {
            // Perform redirect to the desired destination URL
            httpResponse.sendRedirect("https://server.lbg.com/towl";);
            return;
        }

        // For all other URLs, disable access
        httpResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
    }

    // Other methods of the Filter interface (init(), destroy()) can be
left empty for this example
}

Thanks,
Lavanya

On Fri, May 10, 2024 at 10:37 AM lavanya tech <lavanyatech...@gmail.com>
wrote:

> Hi Chris,
>
> I tried the below and have the issues.
>
> 1)proxyPort="443" and proxyName="example.lbg.com" to the connector
> 2) remanmed towl.war to ROOT.war
> 3) created rewrite.config and added as below under conf/
>
> RewriteCond %{REQUEST_URI} ^/towl/(.*)
> RewriteRule ^/towl/(.*) https://example.lbg.com/%1 [R]
>
> 4) added this in web.xml file of /webapps/towl/web.xml/
>
>   <!-- Servlet mappings -->
>     <!-- Add your existing servlet mappings here -->
>
>     <!-- Security constraint to restrict access to /towl path -->
>     <security-constraint>
>         <web-resource-collection>
>             <web-resource-name>Restricted Access to
> /towl</web-resource-name>
>             <url-pattern>/towl/*</url-pattern>
>         </web-resource-collection>
>         <auth-constraint>
>             <!-- Deny access to all roles -->
>         </auth-constraint>
>     </security-constraint>
>
> Also I noticed that even if I rename the towl application to ROOT, when i
> call the url with https://example.lbg.com/towl --> this towl directory is
> getting created under webapps by default
>
> 5) Resarted tomcat and I have the below error and all the urls have the
> same issue
>
> Message org.apache.jasper.JasperException:
> java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
>
> Description The server encountered an unexpected condition that prevented
> it from fulfilling the request.
>
> Exception
>
> org.apache.jasper.JasperException: org.apache.jasper.JasperException:
> java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
>
> org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:578)
>
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:422)
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:380)
> org.apache.jasper.servlet.JspServlet.service(JspServlet.java:328)
> jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
>
> On Thu, May 9, 2024 at 11:20 PM Christopher Schultz <
> ch...@christopherschultz.net> wrote:
>
>> Lavanya,
>>
>> On 5/9/24 13:48, lavanya tech wrote:
>> > Thank you so much for your explanation. I will try these options.
>> >
>> > Do server and example both resolve to the same IP?
>> >          -yes
>>
>> Good, that significantly reduces the complexity required, since you can
>> do it will a single process (Tomcat) in a single environment.
>>
>> > So I need follow both 4a/b and 5a/b steps here or any of them ?
>> >
>> > If I setup exactly by using below steps , then I should access both the
>> > urls right ? https://server.lbg.com:8443/towl and
>> https://example.lbg.com
>>
>> If you visit either hostname with /towl, you will be redirected to
>> example.lbg.com/ with no port number. example:8443 will still work and
>> no redirect will take place... unless you specifically make arrangements
>> for that. We can do that later if you really want to.
>>
>> Let's get the other things working, first.
>>
>> -chris
>>
>> > On Thursday, May 9, 2024, Christopher Schultz <
>> ch...@christopherschultz.net>
>> > wrote:
>> >
>> >> Lavanya,
>> >>
>> >> On 5/9/24 02:58, lavanya tech wrote:
>> >>
>> >>> Just giving background again of this topic again.
>> >>>
>> >>> 1) The application team who is working they wanted to access the url
>> >>> https://server.lbg.com:8443/towl —> which should redirect or point to
>> >>> https://example.lbg.com
>> >>>
>> >>> Is that a typo? You want specifically https://server.lbg.com/towl and
>> >>> https://example.lbg.com/ to point to your application?
>> >>>                 — It’s not the Typo the requirements are still the
>> same.
>> >>>
>> >>
>> >> Okay.
>> >>
>> >> Do server and example both resolve to the same IP?
>> >>
>> >> 2) Hence I added firewall rule to redirect port 443 to 8443. And the
>> url
>> >>> https://example.lbg.com started working but its pointing to
>> >>> https://server.lbg.com:8443 indeed and not
>> https://server.lbg.com:8443/to
>> >>> wl
>> >>>
>> >>> But then they wanted the point 1 to have it. If I understood
>> correctly. So
>> >>> basically to achieve this we wanted a reverse proxy setup ?
>> >>>
>> >>> I didnot define any additional host in server.xml file on just left to
>> >>> default to  local host.
>> >>>
>> >>
>> >> Here's what you have to do in order to support this odd configuration.
>> >>
>> >> 1. Configure your firewall to route port 443 -> 8443. I suspect this is
>> >> already done.
>> >>
>> >> 2. Deploy Tomcat on server.lbg.com with a <Connector> on port 8443.
>> This
>> >> is the default, so there shouldn't be anything to do. I suspect this is
>> >> already done. You should set proxyPort="443" and proxyName="
>> >> example.lbg.com" in your <Connector>. This will ensure that any URLs
>> >> generated by Tomcat or your application will point to
>> >> https://example.lbg.com/ and not to server.lbg.com or have a port
>> number
>> >> or whatever.
>> >>
>> >> 3. Re-name your application directory or WAR file from towl -> ROOT
>> (upper
>> >> case is important). So if you have tomcat/webapps/towl re-name that to
>> >> tomcat/webapps/ROOT or if you have tomcat/webapps/towl.war re-name
>> that to
>> >> tomcat/webapps/ROOT.war.
>> >>
>> >> The last thing to do is get /towl to re-direct to /. There are a few
>> ways
>> >> of doing that.
>> >>
>> >> 4a. Configure your application (now called ROOT and deployed on / and
>> not
>> >> /towl anymore) to handle the /towl URL and specifically redirect this
>> back
>> >> to /. This is oddly specific and has the application trying to
>> redirect to
>> >> itself which is weird.
>> >>
>> >> 4b. Create a new application called towl or towl.war which will be
>> >> deployed on /towl and have THAT redirect to /. I think this is cleaner
>> >> because you can call the application anything you'd like and it will
>> still
>> >> work. You don't have to match URL patterns yourself, you just re-name
>> the
>> >> WAR file if you suddenly want to use /towl2 instead of /towl.
>> >>
>> >> There are several ways to redirect.
>> >>
>> >> 5a. Use the rewrite valve and map /(*) to (global redirect) /\1. A few
>> >> notes: (1) the (*) means "capture this string" and \1 means "put the
>> string
>> >> back. This allows you to redirect /towl/foo/bar to /foo/bar instead of
>> >> losing the /foo/bar. This syntax may not be perfect, adapt it to your
>> >> needs. (2) Remember that the towl application is deployed on /towl so
>> you
>> >> don't want to redirect /towl/foo/bar you only want redirect /foo/bar
>> since
>> >> the URL will be relative to the current context (/towl). Got that?
>> Finally,
>> >> (3) you need to use a global redirect that does *NOT* redirect back to
>> the
>> >> /towl application. Normally, if you redirect to /foo you'll get an
>> >> application-relative redirect from something like a rewrite
>> >> valve/filter/whatever. Take care to redirect relative to the SERVER
>> and not
>> >> to the application.
>> >>
>> >> 5b. Write your own servlet to do a specific redirect.
>> >>
>> >> I hope that helps,
>> >> -chris
>> >>
>> >> On Wednesday, May 8, 2024, Christopher Schultz <
>> >>> ch...@christopherschultz.net>
>> >>> wrote:
>> >>>
>> >>> Lavanya,
>> >>>>
>> >>>> On 5/8/24 06:48, lavanya tech wrote:
>> >>>>
>> >>>> I figured out how I can it make it work with 443. Now the URls are
>> >>>>> working.
>> >>>>> I added iptables route 443 to 8443 and it started working.
>> >>>>>
>> >>>>> nslookup example.lbg.com
>> >>>>>
>> >>>>> Non-authoritative answer:
>> >>>>> Name:    server.lbg.com
>> >>>>> Address:  192.168.200.105
>> >>>>> Aliases:  example.lbg.com
>> >>>>>
>> >>>>>
>> >>>>> I have some application towl running with apache tomcat. I have the
>> >>>>> below
>> >>>>> URLs working.
>> >>>>>
>> >>>>> https://server.lbg.com:8443/towl
>> >>>>> https://server.lbg.com
>> >>>>> https://example.lbg.com
>> >>>>> https://example.lbg.com/towl
>> >>>>>
>> >>>>>
>> >>>>> Now i wanted to disable the url https://example.lbg.com/towl and
>> >>>>> https://server.lbg.com and access only the other remaining two.
>> >>>>>
>> >>>>>
>> >>>>
>> >>>
>> >>>
>> >>>> I would *highly* recommend that you pick either /towl or / and not
>> try to
>> >>>> do both, unless you want to deploy the application twice (which is
>> fine,
>> >>>> just deploy towl.war and ROOT.war as copies of each other). If you
>> try to
>> >>>> re-write /towl to / or / to /towl, you'll find you spend the rest of
>> your
>> >>>> days tracking-down edge-cases and "fixing" them -- likely making
>> things
>> >>>> confusing and, probably, worse.
>> >>>>
>> >>>> In the end our goal to makesure that the links are not  always dead
>> as
>> >>>> soon
>> >>>>
>> >>>>> as the towl is moved to a new machine. Can you pelase assit me how
>> to do
>> >>>>> that?
>> >>>>>
>> >>>>>
>> >>>> The goal should be that "moving" the application only means changing
>> DNS
>> >>>> and everything else works as expected.
>> >>>>
>> >>>> If you:
>> >>>>
>> >>>> 1. Deploy the application with a single context (e.g. /towl, which I
>> >>>> recommend)
>> >>>>
>> >>>> 2. Re-direct / to /towl (this requires a reverse-proxy or a ROOT
>> >>>> application that does nothing but redirect ; my personal preference)
>> >>>>
>> >>>> 3. Do not define any <Host> other than "localhost" and make it the
>> >>>> default. Do not bother with any <Alias> elements since they are not
>> >>>> necessary.
>> >>>>
>> >>>> Moving the application should only require that you:
>> >>>>
>> >>>> 4. Deploy the same application with the same configuration in the new
>> >>>> location
>> >>>>
>> >>>> 5. Change DNS to point example.lbg.com and server.lbg.com to the new
>> >>>> location of the service
>> >>>>
>> >>>> Hope that helps,
>> >>>> -chris
>> >>>>
>> >>>> On Tue, Apr 30, 2024 at 5:44 PM Christopher Schultz <
>> >>>> ch...@christopherschultz.net> wrote:
>> >>>>
>> >>>> Lavanya,
>> >>>>
>> >>>> On 4/30/24 07:10, lavanya tech wrote:
>> >>>>
>> >>>> Can you tell me how to do the below ? How should I setup Tomcat in
>> >>>> server.xml ?
>> >>>>
>> >>>>
>> >>>> If you want to use port 443 (the default port for HTTPS) then you
>> will
>> >>>> need to change Tomcat to bind to port 443 (if that's allowed on your
>> OS)
>> >>>> or arrange to have port 443 routed to port 8443. You may need
>> additional
>> >>>> configuration in Tomcat (specifically: proxyPort) to avoid having
>> Tomcat
>> >>>> generate URLs with ":8443" in them.
>> >>>>
>> >>>> Looking forward to your reply.
>> >>>>
>> >>>>
>> >>>> If Tomcat is listening on port 8443 then you will need to include
>> that
>> >>>> in your URL, period. If you want to allow URLs without a port number,
>> >>>> you will have to arrange to have something listening on port 443.
>> >>>>
>> >>>> On Windows, Tomcat can listen directly on port 443. On UNIX and
>> >>>> UNIX-like systems, you won't be able to do this without running
>> Tomcat
>> >>>> as root WHICH YOU ABSOLUTELY SHOULD NOT DO.
>> >>>>
>> >>>> There are other ways to get port 443 working, but I'll need to know
>> more
>> >>>> about your environment. The port issue is "easier" than figuring out
>> >>>> whatever is going on with your DNS, aliases, etc. so I would
>> recommend
>> >>>> we fix one thing at a time.
>> >>>>
>> >>>> -chris
>> >>>>
>> >>>> On Mon, Apr 29, 2024 at 2:03 PM lavanya tech <
>> lavanyatech...@gmail.com>
>> >>>> wrote:
>> >>>>
>> >>>> Hi Chris,
>> >>>>
>> >>>> There is no issues with browser, because I tested with different
>> >>>>
>> >>>> browsers
>> >>>>
>> >>>> and it all works fine. I am sure that there is no issue with the
>> >>>> certificate.
>> >>>>      Because I was able to establish successful connections with port
>> >>>>
>> >>>> 8443, it
>> >>>>
>> >>>> just doesnot work with out port
>> >>>>
>> >>>>      curl  https://example.lbg.com/towl
>> >>>> curl: (56) Received HTTP code 504 from proxy after CONNECT
>> >>>> curl: (56) Received HTTP code 504 from proxy after CONNECT
>> >>>>
>> >>>>
>> >>>> If you want to use port 443 (the default port for HTTPS) then you
>> will
>> >>>> need to change Tomcat to bind to port 443 (if that's allowed on your
>> OS)
>> >>>> or arrange to have port 443 routed to port 8443. You may need
>> additional
>> >>>> configuration in Tomcat (specifically: proxyPort) to avoid having
>> Tomcat
>> >>>> generate URLs with ":8443" in them.
>> >>>>
>> >>>> <Connector port="443" protocol="HTTP/1.1"
>> >>>>                connectionTimeout="20000"
>> >>>>                redirectPort="8443"
>> >>>>                maxThreads="150"
>> >>>>                scheme="https" secure="true" SSLEnabled="true"
>> >>>>                keystoreFile="path_to_your_keystore_file"
>> >>>>                keystorePass="your_keystore_password"
>> >>>>                keystoreType="PKCS12"
>> >>>>                clientAuth="false" sslProtocol="TLS"
>> >>>>                proxyPort="443"/>
>> >>>>
>> >>>> should i use connect port like the above ?  But you mentioned before
>> we
>> >>>> dont need any configuration changes. Please clarify I am not able to
>> >>>>
>> >>>> figure
>> >>>>
>> >>>> this out and I have this issue many days pending. How to make it work
>> >>>>
>> >>>> with
>> >>>>
>> >>>> port 8443 and with out port
>> >>>>
>> >>>> Also I wanted to use weburl with alias name permanently instead of
>> the
>> >>>> hostname. How can I achieve both
>> >>>>
>> >>>> Thanks,
>> >>>> Lavanya
>> >>>>
>> >>>>
>> >>>>       -->
>> >>>>
>> >>>>
>> >>>> On Fri, Apr 26, 2024 at 9:28 PM Christopher Schultz <
>> >>>> ch...@christopherschultz.net> wrote:
>> >>>>
>> >>>> Lavanya,
>> >>>>
>> >>>> On 4/25/24 07:24, lavanya tech wrote:
>> >>>>
>> >>>> Hi Chris,
>> >>>>
>> >>>> One question / doubt:
>> >>>>
>> >>>> As I mentioned earlier, the below URLS already working in the browser
>> >>>>
>> >>>> https://server.lbg.com:8443/towl
>> >>>> https://example.lbg.com:8443/towl -> redirect ( which means when I
>> >>>>
>> >>>> hit in
>> >>>>
>> >>>> browser) it points to https://server.lbg.com:8443/towl ---> To be
>> >>>>
>> >>>> frank,
>> >>>>
>> >>>> even I donot need redirect here, not sure why it redirects.
>> >>>>
>> >>>> My question is why its working even though SAN is not registered with
>> >>>>
>> >>>> the
>> >>>>
>> >>>> certificate ? It doesnot even throw warning in the browser.
>> >>>>
>> >>>>
>> >>>> I'm not sure. Is it possible you have dismissed this error in the
>> past
>> >>>> and the browser is remembering that? Try this with a different web
>> >>>> browser or maybe with curl from the command-line to see what happens.
>> >>>>
>> >>>> Why https://server.lbg.com/towl or https://example.lbg.com/towl -->
>> >>>>
>> >>>> How it
>> >>>>
>> >>>> should work with New SAN certificate ?
>> >>>>
>> >>>>
>> >>>> You don't need to worry about the port number or application name,
>> only
>> >>>> the hostname is a part of the SAN.
>> >>>>
>> >>>> -chris
>> >>>>
>> >>>> On Thu, Apr 25, 2024 at 10:16 AM lavanya tech <
>> >>>>
>> >>>> lavanyatech...@gmail.com
>> >>>>
>> >>>>
>> >>>> wrote:
>> >>>>
>> >>>> Hi Chris,
>> >>>>
>> >>>>
>> >>>> Thanks I will request new certificate with SANs and I will try to fix
>> >>>>
>> >>>> the
>> >>>>
>> >>>> things from our end.
>> >>>>
>> >>>> Best Regards,
>> >>>> Lavanya
>> >>>>
>> >>>> On Wed, Apr 24, 2024 at 11:12 PM Christopher Schultz <
>> >>>> ch...@christopherschultz.net> wrote:
>> >>>>
>> >>>> Lavanya,
>> >>>>
>> >>>> On 4/24/24 15:39, lavanya tech wrote:
>> >>>>
>> >>>> Local host means the machine i am logged in to server.lbg.com
>> >>>>
>> >>>> You are right, example.lbg.com is CNAME record.
>> >>>>
>> >>>>
>> >>>> Okay, thanks for clearing that up.
>> >>>>
>> >>>> I dont have any SAN configured for the certificate. The certificate
>> >>>>
>> >>>> is
>> >>>>
>> >>>> requested for only server.lbg.com
>> >>>>
>> >>>>
>> >>>> You will never be able to make a secure request to anything other
>> >>>>
>> >>>> than
>> >>>>
>> >>>> server.lbg.com without seeing an error. I highly recommend adding
>> >>>>
>> >>>> the
>> >>>>
>> >>>> other hostname as a SAN to your certificate if you really want to
>> >>>> support this.
>> >>>>
>> >>>> Even if you wanted https://example.lbg.com/whatever to return an
>> >>>>
>> >>>> HTTP
>> >>>>
>> >>>> 302 redirect to https://server.lbg.com/whatever, the user would
>> >>>>
>> >>>> see a
>> >>>>
>> >>>> certificate hostname mismatch error which is ugly. It's best to make
>> >>>>
>> >>>> it
>> >>>>
>> >>>> work without users seeing ugly things.
>> >>>>
>> >>>> So if i just request new certificate with SAN it should work ? If
>> >>>>
>> >>>> yes, I
>> >>>>
>> >>>> will request for it and follow your steps as below suggested.
>> >>>>
>> >>>>
>> >>>> Yes, it should.
>> >>>>
>> >>>> Should i use CName record or DNS? Does it make difference?
>> >>>>
>> >>>>
>> >>>> CNAME *is* DNS.
>> >>>>
>> >>>> Whenever possible, use hostnames and not IP addresses as SANs. It's
>> >>>>
>> >>>> more
>> >>>>
>> >>>> flexible that way, and users get to see hostnames instead of IP
>> >>>>
>> >>>> addresses.
>> >>>>
>> >>>>
>> >>>> -chris
>> >>>>
>> >>>> On Wednesday, April 24, 2024, Christopher Schultz <
>> >>>> ch...@christopherschultz.net> wrote:
>> >>>>
>> >>>> Lavanya,
>> >>>>
>> >>>> On 4/24/24 07:37, lavanya tech wrote:
>> >>>>
>> >>>> Sorry I understood wrongly here with regards to my environment,
>> >>>>
>> >>>> Let me
>> >>>>
>> >>>> start from the beginning. I donot want to use redirect at all. I
>> >>>>
>> >>>> simply
>> >>>>
>> >>>> wanted to force apache tomcat to use both localhost and dns name
>> >>>>
>> >>>> of
>> >>>>
>> >>>> the
>> >>>>
>> >>>> localhost via url.
>> >>>>
>> >>>>
>> >>>> When you say "force" what do you mean?
>> >>>>
>> >>>> When you say "use both localhost and DNS name" what do you mean?
>> >>>>
>> >>>> When you say "localhost" do you mean 127.0.0.1 or "the machine I'm
>> >>>> logged-into right now"?
>> >>>>
>> >>>> I have DNS resollution as below.
>> >>>>
>> >>>>
>> >>>> server.lbg.com --> localhost
>> >>>>
>> >>>>
>> >>>> Is that a CNAME record?
>> >>>>
>> >>>> nslookup server.lbg.com (localhost)
>> >>>>
>> >>>> Name:    server.lbg.com
>> >>>> Address:  192.168.100.20
>> >>>> alias: example.lbg.com
>> >>>>
>> >>>>
>> >>>> That's a weird DNS response. The DNS name "localhost" should
>> >>>>
>> >>>> *always*
>> >>>>
>> >>>> return 127.0.0.1 for IPv4 and ::1 for IPv6. It shouldn't return
>> >>>> 191.168.100.20.
>> >>>>
>> >>>> We have working the below urls working:
>> >>>>
>> >>>> https://server.lbg.com:8443/towl
>> >>>> https://example.lbg.com:8443/towl --> redirects to
>> >>>>
>> >>>>
>> >>>> What do you mean "redirect"? Does it return a 30x response that
>> >>>>
>> >>>> causes
>> >>>>
>> >>>> the
>> >>>>
>> >>>> browser to make a new request to \/
>> >>>>
>> >>>> https://server.lbg.com:8443/towl  --> still works --> we have SSL
>> >>>>
>> >>>> configured for the same but this SSL certificate doesnot have
>> >>>>
>> >>>> additional
>> >>>>
>> >>>> DNS setup.
>> >>>>
>> >>>>
>> >>>> What SANs are in your certificate? How many certificates do you
>> >>>>
>> >>>> have?
>> >>>>
>> >>>>
>> >>>> But I would need to somehow  access https://example.lbg.com -->
>> >>>>
>> >>>> which
>> >>>>
>> >>>> means
>> >>>> I would need to access via 443 here ?
>> >>>>
>> >>>>
>> >>>> I'm so confused. What needs to access what?
>> >>>>
>> >>>> I tried to adding the below to  server.xml as below, but that
>> >>>>
>> >>>> doesnot
>> >>>>
>> >>>> seems
>> >>>>
>> >>>> to work.
>> >>>>
>> >>>>            <Connector port="80"
>> >>>> protocol="org.apache.coyote.http11.Http11NioProtocol"
>> >>>>                   connectionTimeout="20000"
>> >>>>                   redirectPort="443" />
>> >>>>
>> >>>>
>> >>>> This will only redirect (HTTP 302) requests to
>> >>>>
>> >>>> http://yourhost/anything
>> >>>>
>> >>>> to https://yourhost/anything *if the application specifically
>> >>>>
>> >>>> requests
>> >>>>
>> >>>> CONFIDENTIAL transport*. It doesn't just redirect everything by
>> >>>>
>> >>>> default. If
>> >>>>
>> >>>> you want it to redirect everything, you'll need to set that up
>> >>>>
>> >>>> e.g.
>> >>>>
>> >>>> using
>> >>>>
>> >>>> RewriteValve. There are other options, too.
>> >>>>
>> >>>> Do i need additional SSL certificate for the
>> >>>>
>> >>>> https://example.lbg.com
>> >>>>
>> >>>> to
>> >>>>
>> >>>> make it work ?
>> >>>>
>> >>>>
>> >>>> If you don't want your browser to complain, you will need at least
>> >>>>
>> >>>> one
>> >>>>
>> >>>> TLS
>> >>>>
>> >>>> certificate that contains every Subject Alternative Name (SAN) for
>> >>>>
>> >>>> every
>> >>>>
>> >>>> possible hostname you expect to use with this service. You ca do
>> >>>>
>> >>>> it
>> >>>>
>> >>>> with
>> >>>>
>> >>>> multiple certificates as well, but a single cert with multiple
>> >>>>
>> >>>> SANs
>> >>>>
>> >>>> is
>> >>>>
>> >>>> less
>> >>>>
>> >>>> work.
>> >>>>
>> >>>> Do i need to set up an additional web server for this like apache
>> >>>>
>> >>>> or
>> >>>>
>> >>>> nginx
>> >>>>
>> >>>> for redirecting requests?
>> >>>>
>> >>>>
>> >>>> No.
>> >>>>
>> >>>> Please stop saying "redirect" because it sounds like you almost
>> >>>>
>> >>>> never
>> >>>>
>> >>>> mean
>> >>>>
>> >>>> "HTTP 30x redirect" and that's confusing everything.
>> >>>>
>> >>>> I *think* you only need the following:
>> >>>>
>> >>>> 1. A TLS certificate with the following SANs:
>> >>>>
>> >>>>         * server.lbg.com
>> >>>>         * example.lbg.com
>> >>>>         * localhost (you shouldn't do this)
>> >>>>
>> >>>> 2. DNS configured for all hostnames:
>> >>>>
>> >>>>         * server.lbg.com -> A 192.168.100.20
>> >>>>         * example.lgb.com -> A 192.168.100.20
>> >>>>
>> >>>> 3. Tomcat configured with a single <Host> which is the default
>> >>>>
>> >>>> virtual
>> >>>>
>> >>>> host. Note that this is the *default Tomcat configuration* and
>> >>>>
>> >>>> doesn't
>> >>>>
>> >>>> need
>> >>>>
>> >>>> to be changed from the default.
>> >>>>
>> >>>> 4. Tomcat configured with your certificate like this:
>> >>>>
>> >>>>          <Connector ...
>> >>>>             SSLEnabled="true">
>> >>>>            <SSLHostConfig>
>> >>>>              <Certificate
>> >>>>                  certificateFile="/path/to/your/cert.crt"
>> >>>>                  certificateKeyFile="/path/to/your/key.pem" />
>> >>>>              <!-- You may need certificateKeyPassword in
>> >>>>
>> >>>> <Certificate>
>> >>>>
>> >>>> -->
>> >>>>
>> >>>>            </SSLHostConfig>
>> >>>>          </Connector>
>> >>>>
>> >>>> If your SANs are configured properly, this should allow you to
>> >>>>
>> >>>> connect
>> >>>>
>> >>>> using any of these URLs:
>> >>>>
>> >>>> $ curl https://server.lbg.com/towl/login.jsp
>> >>>>
>> >>>>         (returns login page)
>> >>>>
>> >>>> $ curl https://example.lbg.com/towl/login.jsp
>> >>>>
>> >>>>         (returns login page)
>> >>>>
>> >>>> If your application's web.xml contains something like this:
>> >>>>
>> >>>>         <security-constraint>
>> >>>>           <web-resource-collection>
>> >>>>             <web-resource-name>theapp</web-resource-name>
>> >>>>             <url-pattern>/*</url-pattern>
>> >>>>           </web-resource-collection>
>> >>>>           <user-data-constraint>
>> >>>>             <transport-guarantee>CONFIDENTIAL</transport-guarantee>
>> >>>>           </user-data-constraint>
>> >>>>         </security-constraint>
>> >>>>
>> >>>> ... then these URLs insecure HTTP URLs should redirect your
>> >>>>
>> >>>> clients:
>> >>>>
>> >>>>
>> >>>> $ curl http://server.lbg.com/towl/login.jsp
>> >>>>
>> >>>>         (returns HTTP 302 redirect to
>> >>>>
>> >>>> https://server.lbg.com/towl/login.jsp
>> >>>>
>> >>>> )
>> >>>>
>> >>>>
>> >>>> $ curl https://server.lbg.com/towl/login.jsp
>> >>>>
>> >>>>         (returns HTTP 302 redirect to
>> >>>>
>> >>>> https://example.lbg.com/towl/login.jsp)
>> >>>>
>> >>>>
>> >>>> I don't think you need any use of the RewriteValve unless you want
>> >>>>
>> >>>> to
>> >>>>
>> >>>> handle sending HTTP 302 redirect responses to insecure requests
>> >>>>
>> >>>> without
>> >>>>
>> >>>> specifying the CONFIDENTIAL transport-guarantee in your
>> >>>>
>> >>>> application's
>> >>>>
>> >>>> web.xml file. But I don't see any reason NOT to have that in
>> >>>>
>> >>>> there.
>> >>>>
>> >>>>
>> >>>> -chris
>> >>>>
>> >>>> On Tue, Apr 23, 2024 at 10:52 PM Christopher Schultz <
>> >>>>
>> >>>> ch...@christopherschultz.net> wrote:
>> >>>>
>> >>>> Lavanya,
>> >>>>
>> >>>>
>> >>>> On 4/22/24 05:21, lavanya tech wrote:
>> >>>>
>> >>>> Could you please explain, what you exactly mean ? So here
>> >>>>
>> >>>> redirect
>> >>>>
>> >>>> is
>> >>>>
>> >>>>
>> >>>> not a
>> >>>>
>> >>>> solution right ?
>> >>>>
>> >>>>
>> >>>> Redirecting is fine.
>> >>>>
>> >>>> Perhaps you should take a step back and decide: what do you
>> >>>>
>> >>>> actually
>> >>>>
>> >>>> want, here? You might be trying to solve problem X by applying
>> >>>>
>> >>>> solution
>> >>>>
>> >>>> Y, and you've already decided that solution Y is correct so you
>> >>>>
>> >>>> are
>> >>>>
>> >>>> trying to get help with that.
>> >>>>
>> >>>> Perhaps ask for help with Problem X?
>> >>>>
>> >>>> For example, "I don't want users to have to type the name of my
>> >>>> application to reach it so I want example.com/ to go to my
>> >>>>
>> >>>> application
>> >>>>
>> >>>> instead of example.com/myapp/".
>> >>>>
>> >>>> Or, "I have multiple domains and I want all of them to redirect
>> >>>>
>> >>>> to
>> >>>>
>> >>>> the
>> >>>>
>> >>>> canonical domain example.com and to go to me web application
>> >>>>
>> >>>> /myapp
>> >>>>
>> >>>> so
>> >>>>
>> >>>> everything goes to example.com/myapp/".
>> >>>>
>> >>>> "You'd have to use a glob/regex if
>> >>>>
>> >>>> you wanted to check for [anything and maybe nothing.]
>> >>>>
>> >>>> example.com
>> >>>>
>> >>>> ."
>> >>>>
>> >>>>
>> >>>>
>> >>>> There is nothing in your configuration or question that suggests
>> >>>>
>> >>>> that
>> >>>>
>> >>>> the hostname in the request is relevant, but you are making it a
>> >>>> *requirement* that the request contains a specific Host header.
>> >>>>
>> >>>> IF
>> >>>>
>> >>>> you
>> >>>>
>> >>>> don't actually need that, why do you have it?
>> >>>>
>> >>>> -chris
>> >>>>
>> >>>> On Fri, Apr 19, 2024 at 3:03 PM Christopher Schultz <
>> >>>>
>> >>>> ch...@christopherschultz.net> wrote:
>> >>>>
>> >>>> Ammu,
>> >>>>
>> >>>>
>> >>>> On 4/19/24 08:32, lavanya tech wrote:
>> >>>>
>> >>>> Thank you very much. I removed <Host> for example.com as
>> >>>>
>> >>>> well
>> >>>>
>> >>>> as
>> >>>>
>> >>>>
>> >>>> adding
>> >>>>
>> >>>>
>> >>>> an
>> >>>>
>> >>>>
>> >>>> <Alias> in server.xml
>> >>>> I copied context.xml file
>> >>>>
>> >>>> /git/app/apache-tomcat-10.1.11/webapps/towl/META-INF/context.xml
>> >>>>
>> >>>> Removed < in rewrite.config files.
>> >>>>
>> >>>> But still I dont redirect the URL.
>> >>>>
>> >>>>
>> >>>> If you have <Context> in server.xml and also your application
>> >>>>
>> >>>> in
>> >>>>
>> >>>> the
>> >>>>
>> >>>> webapps/ directory, then you will be double-deploying your
>> >>>>
>> >>>> application.
>> >>>>
>> >>>>
>> >>>> Re-name /git/app/apache-tomcat-10.1.11/webapps/towl/ to be
>> >>>> /git/app/apache-tomcat-10.1.11/webapps/ROOT (the capitals are
>> >>>> important)
>> >>>> and remove the <Context> element from your server.xml.
>> >>>>
>> >>>> Then start your server and read the logs.
>> >>>>
>> >>>> *nslookup alias.example.com <http://alias.example.com>
>> >>>>
>> >>>> gives-->Non-authoritative answer:Name:     www.example.com
>> >>>> <http://www.example.com>Address:  192.168.200.10Aliases:
>> >>>>
>> >>>> alias.example.com
>> >>>>
>> >>>> <http://alias.example.com>*
>> >>>>
>> >>>>
>> >>>> Just to give some information here, *www.example.com
>> >>>> <http://www.example.com>* has alias* "alias.example.com
>> >>>> <http://alias.example.com>"*
>> >>>> But https://www.example.com:7777/example --> works fine with
>> >>>>
>> >>>> out
>> >>>>
>> >>>>
>> >>>> issues
>> >>>>
>> >>>>
>> >>>> but
>> >>>>
>> >>>>
>> >>>> the alias doesnot works (https://alias.example.com)
>> >>>> So i am not sure if the redirect url helps or if its correct
>> >>>>
>> >>>>
>> >>>> Your rewrite configuration says that you have to be using host
>> >>>> "example.com" but your request goes to www.example.com. Your
>> >>>> configuration should only redirect a request such as:
>> >>>>
>> >>>> $ curl -v http://example.com:7777/something
>> >>>>
>> >>>> HTTP/1.1 301 Moved Permanently
>> >>>> ...
>> >>>> Location: https://www.example.com:7777/example
>> >>>>
>> >>>> If you make a request like:
>> >>>>
>> >>>> $ curl -v http://www.example.com:7777/something
>> >>>>
>> >>>> I wouldn't expect a redirect because of your "host" condition.
>> >>>>
>> >>>> The
>> >>>>
>> >>>> "%{HTTP_HOST} example.com" looks at the entire Host header
>> >>>>
>> >>>> and
>> >>>>
>> >>>> not
>> >>>>
>> >>>> just
>> >>>> anything that ends in "example.com". You'd have to use a
>> >>>>
>> >>>> glob/regex if
>> >>>>
>> >>>> you wanted to check for [anything and maybe nothing.]
>> >>>>
>> >>>> example.com.
>> >>>>
>> >>>>
>> >>>> You'd also have to make sure that your application is serving
>> >>>>
>> >>>> responses
>> >>>>
>> >>>> to requests to / which is why I'm recommending you use the
>> >>>>
>> >>>> ROOT
>> >>>>
>> >>>> web
>> >>>>
>> >>>> application name instead of "towl".
>> >>>>
>> >>>> -chris
>> >>>>
>> >>>> On Fri, Apr 19, 2024 at 1:21 PM Christopher Schultz <
>> >>>>
>> >>>> ch...@christopherschultz.net> wrote:
>> >>>>
>> >>>> Ammu,
>> >>>>
>> >>>>
>> >>>> On 4/18/24 09:34, lavanya tech wrote:
>> >>>>
>> >>>> I am attaching server.xml and context.xml and
>> >>>>
>> >>>> rewrite.config
>> >>>>
>> >>>> files.
>> >>>>
>> >>>> The paths are
>> >>>>
>> >>>> /git/app/apache-tomcat-10.1.11/webapps/towl/context.xml
>> >>>> <Context>
>> >>>>               <Valve
>> >>>>
>> >>>> className="org.apache.catalina.valves.rewrite.RewriteValve"
>> >>>>
>> >>>>
>> >>>> />
>> >>>>
>> >>>>
>> >>>>               <!-- Other context configuration -->
>> >>>> </Context>
>> >>>>
>> >>>>
>> >>>> This file ^^^ is in the wrong place. It should be in
>> >>>>
>> >>>> /git/app/apache-tomcat-10.1.11/webapps/towl/META-INF/context.xml
>> >>>>
>> >>>>
>> >>>>
>> >>>> /git/app/apache-tomcat-10.1.11/webapps/towl/WEB-INF/rewrite.config
>> >>>>
>> >>>>
>> >>>> <RewriteCond %{HTTP_HOST} example.com [NC]
>> >>>> <RewriteRule ^/(.*)$ https://www.example.com:7777/example
>> >>>>
>> >>>> [R=301,L]
>> >>>>
>> >>>>
>> >>>>
>> >>>> Why do you have < symbols at the beginning of these lines?
>> >>>>
>> >>>> server.xml
>> >>>>
>> >>>>
>> >>>>           > [...]
>> >>>>
>> >>>>
>> >>>>
>> >>>>                 <Host name="example.com" appBase="webapps"
>> >>>>
>> >>>> unpackWARs="true"
>> >>>>
>> >>>>
>> >>>> autoDeploy="true">
>> >>>>
>> >>>>                     <Context path="" docBase="towl" />
>> >>>>
>> >>>>
>> >>>> It's best not to define any <Context> in server.xml. I would
>> >>>>
>> >>>> remove
>> >>>>
>> >>>>
>> >>>> this
>> >>>>
>> >>>>
>> >>>> <Context> entirely and allow Tomcat to auto-reploy from your
>> >>>>
>> >>>> webapps/towl directory. If you need this application to be
>> >>>>
>> >>>> deployed
>> >>>>
>> >>>> as
>> >>>> the ROOT context (on / and not /towl) then you should
>> >>>>
>> >>>> re-name
>> >>>>
>> >>>> /git/app/apache-tomcat-10.1.11/webapps/towl to
>> >>>> /git/app/apache-tomcat-10.1.11/webapps/ROOT
>> >>>>
>> >>>> You also don't need a <Host> for example.com as well as
>> >>>>
>> >>>> adding
>> >>>>
>> >>>> an
>> >>>>
>> >>>> <Alias> for the same domain (though this is probably to
>> >>>>
>> >>>> anonymize the
>> >>>>
>> >>>>
>> >>>>
>> >>>
>> >> ---------------------------------------------------------------------
>> >> 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
>>
>>

Reply via email to