<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Solve Splunk AppDynamics HTTP Error 400 — Invalid SNI HTTP Error in Share a Tip</title>
    <link>https://community.splunk.com/t5/Share-a-Tip/Solve-Splunk-AppDynamics-HTTP-Error-400-Invalid-SNI-HTTP-Error/m-p/741558#M83</link>
    <description>&lt;P&gt;When deploying Splunk AppDynamics on-premises, you will have access to the controller app server on ports:&lt;/P&gt;
&lt;TABLE border="1" width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%"&gt;Name&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;Port&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;Description&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Controller App Server (Primary)&lt;/TD&gt;
&lt;TD&gt;8090&lt;/TD&gt;
&lt;TD&gt;HTTP&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%"&gt;Controller App Server (SSL)&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;8181&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;HTTPs&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;However, when you open the controller in the browser on port 8181, you might get this error:&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="Screenshot 2025-03-11 at 20-27-22 Error 400 Invalid SNI.png" style="width: 999px;"&gt;&lt;img src="https://community.splunk.com/t5/image/serverpage/image-id/38129iFAC6C7E638D44009/image-size/large?v=v2&amp;amp;px=999" role="button" title="Screenshot 2025-03-11 at 20-27-22 Error 400 Invalid SNI.png" alt="Screenshot 2025-03-11 at 20-27-22 Error 400 Invalid SNI.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="2" color="#000000"&gt;&lt;EM&gt;The error means that the CN and SAN values of the generated self-signed certificate (most probably the values are: localhost, for both) doesn't match your hostname you are using to open the controller page in the browser.&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;There are two options to solve this issue:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="arial black,avant garde"&gt;&lt;STRONG&gt;Option 1&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Generate a new SSL certificate with CN and SAN same as the hostname of the server. You can check the documentation here at&amp;nbsp;&lt;A title="" href="https://docs.appdynamics.com/appd/onprem/24.x/latest/en/secure-the-platform/controller-ssl-and-certificates" target="_blank" rel="noopener"&gt;Secure the Platform &amp;gt; Controller SSL and Certificates&lt;/A&gt;&amp;nbsp;on how to generate the new certificate.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="arial black,avant garde"&gt;&lt;STRONG&gt;Option 2&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Disable the SNI Host Check on Jetty (Read more: &lt;A href="https://jetty.org/docs/jetty/11/operations-guide/protocols/index.html#ssl-sni" target="_blank" rel="noopener"&gt;jetty.ssl.sniHostCheck&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;&lt;FONT size="2" color="#993366"&gt;&lt;EM&gt;This solution is applicable for Enterprise Console &amp;gt;=23.11 where the Controller uses Jetty Application server instead of GlassFish.&amp;nbsp;&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;LI-SPOILER&gt;&lt;STRONG&gt;&lt;FONT color="#FF0000"&gt;This is not a permanent solution as the below changes will revert whenever jetty is upgraded. It solves the problem until the next controller upgrade (specifically Jetty version upgrade). &lt;EM&gt;This workaround needs to be documented.&lt;/EM&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/LI-SPOILER&gt;
&lt;P&gt;This option involves changing the default value of &lt;EM&gt;sniHostCheck&lt;/EM&gt; from true to &lt;STRONG&gt;false&lt;/STRONG&gt;. And to do it, the steps are straightforward.&lt;/P&gt;
&lt;P&gt;&lt;FONT size="1 2 3 4 5 6 7"&gt;&lt;EM&gt;I assume you installed your Splunk AppDynamics controller instance on a Linux server/VM.&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;$ cd /opt/appdynamics/platform/product/controller/appserver/jetty/etc
$ cat jetty-ssl.xml
&amp;lt;?xml version="1.0"?&amp;gt;&amp;lt;!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd"&amp;gt;

&amp;lt;!-- ============================================================= --&amp;gt;
&amp;lt;!-- Base SSL configuration                                        --&amp;gt;
&amp;lt;!-- This configuration needs to be used together with 1 or more   --&amp;gt;
&amp;lt;!-- of jetty-https.xml or jetty-http2.xml                         --&amp;gt;
&amp;lt;!-- ============================================================= --&amp;gt;
&amp;lt;Configure id="Server" class="org.eclipse.jetty.server.Server"&amp;gt;

  &amp;lt;!-- =========================================================== --&amp;gt;
  &amp;lt;!-- Create a TLS specific HttpConfiguration based on the        --&amp;gt;
  &amp;lt;!-- common HttpConfiguration defined in jetty.xml               --&amp;gt;
  &amp;lt;!-- Add a SecureRequestCustomizer to extract certificate and    --&amp;gt;
  &amp;lt;!-- session information                                         --&amp;gt;
  &amp;lt;!-- =========================================================== --&amp;gt;
  &amp;lt;New id="sslHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration"&amp;gt;
    &amp;lt;Arg&amp;gt;&amp;lt;Ref refid="httpConfig"/&amp;gt;&amp;lt;/Arg&amp;gt;
    &amp;lt;Call name="addCustomizer"&amp;gt;
      &amp;lt;Arg&amp;gt;
        &amp;lt;New class="org.eclipse.jetty.server.SecureRequestCustomizer"&amp;gt;
          &amp;lt;Arg name="sniRequired" type="boolean"&amp;gt;&amp;lt;Property name="jetty.ssl.sniRequired" default="false"/&amp;gt;&amp;lt;/Arg&amp;gt;
          &amp;lt;Arg name="sniHostCheck" type="boolean"&amp;gt;&amp;lt;Property name="jetty.ssl.sniHostCheck" default="true"/&amp;gt;&amp;lt;/Arg&amp;gt;
          &amp;lt;Arg name="stsMaxAgeSeconds" type="int"&amp;gt;&amp;lt;Property name="jetty.ssl.stsMaxAgeSeconds" default="-1"/&amp;gt;&amp;lt;/Arg&amp;gt;
          &amp;lt;Arg name="stsIncludeSubdomains" type="boolean"&amp;gt;&amp;lt;Property name="jetty.ssl.stsIncludeSubdomains" default="false"/&amp;gt;&amp;lt;/Arg&amp;gt;
        &amp;lt;/New&amp;gt;
      &amp;lt;/Arg&amp;gt;
    &amp;lt;/Call&amp;gt;
  &amp;lt;/New&amp;gt;

&amp;lt;/Configure&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As seen in the output of the &lt;STRONG&gt;jetty-ssl.xml&lt;/STRONG&gt; file, the Property default value is &lt;STRONG&gt;"true"&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;&amp;lt;Arg name="sniHostCheck" type="boolean"&amp;gt;&amp;lt;Property name="jetty.ssl.sniHostCheck" default="true"/&amp;gt;&amp;lt;/Arg&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And needs to be changed to &lt;STRONG&gt;"false"&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;&amp;lt;Arg name="sniHostCheck" type="boolean"&amp;gt;&amp;lt;Property name="jetty.ssl.sniHostCheck" default="false"/&amp;gt;&amp;lt;/Arg&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You will need to do the same change in &lt;FONT color="#FF0000"&gt;&lt;STRONG&gt;jetty-ssl.xml.j2&lt;/STRONG&gt;&lt;/FONT&gt; file as well.&lt;/P&gt;
&lt;P&gt;Changing the SNI host check value to false bypasses the check of&amp;nbsp;&lt;SPAN&gt;whether the certificate sent to the client matches the&amp;nbsp;&lt;/SPAN&gt;Host&lt;SPAN&gt;&amp;nbsp;header.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Finally, restart the controller app server. After the restart is completed, you will be able to open your Splunk AppDynamics controller via HTTPs on port 8181.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="HTTPs.jpg" style="width: 999px;"&gt;&lt;img src="https://community.splunk.com/t5/image/serverpage/image-id/38130i8C83D50C1B1244A5/image-size/large?v=v2&amp;amp;px=999" role="button" title="HTTPs.jpg" alt="HTTPs.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Osama Abbas&lt;/SPAN&gt;&lt;/P&gt;</description>
    <pubDate>Mon, 22 Jun 2026 23:19:53 GMT</pubDate>
    <dc:creator>Osama_Abbas1</dc:creator>
    <dc:date>2026-06-22T23:19:53Z</dc:date>
    <item>
      <title>Solve Splunk AppDynamics HTTP Error 400 — Invalid SNI HTTP Error</title>
      <link>https://community.splunk.com/t5/Share-a-Tip/Solve-Splunk-AppDynamics-HTTP-Error-400-Invalid-SNI-HTTP-Error/m-p/741558#M83</link>
      <description>&lt;P&gt;When deploying Splunk AppDynamics on-premises, you will have access to the controller app server on ports:&lt;/P&gt;
&lt;TABLE border="1" width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%"&gt;Name&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;Port&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;Description&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Controller App Server (Primary)&lt;/TD&gt;
&lt;TD&gt;8090&lt;/TD&gt;
&lt;TD&gt;HTTP&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%"&gt;Controller App Server (SSL)&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;8181&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;HTTPs&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;However, when you open the controller in the browser on port 8181, you might get this error:&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="Screenshot 2025-03-11 at 20-27-22 Error 400 Invalid SNI.png" style="width: 999px;"&gt;&lt;img src="https://community.splunk.com/t5/image/serverpage/image-id/38129iFAC6C7E638D44009/image-size/large?v=v2&amp;amp;px=999" role="button" title="Screenshot 2025-03-11 at 20-27-22 Error 400 Invalid SNI.png" alt="Screenshot 2025-03-11 at 20-27-22 Error 400 Invalid SNI.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="2" color="#000000"&gt;&lt;EM&gt;The error means that the CN and SAN values of the generated self-signed certificate (most probably the values are: localhost, for both) doesn't match your hostname you are using to open the controller page in the browser.&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;There are two options to solve this issue:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="arial black,avant garde"&gt;&lt;STRONG&gt;Option 1&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Generate a new SSL certificate with CN and SAN same as the hostname of the server. You can check the documentation here at&amp;nbsp;&lt;A title="" href="https://docs.appdynamics.com/appd/onprem/24.x/latest/en/secure-the-platform/controller-ssl-and-certificates" target="_blank" rel="noopener"&gt;Secure the Platform &amp;gt; Controller SSL and Certificates&lt;/A&gt;&amp;nbsp;on how to generate the new certificate.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="arial black,avant garde"&gt;&lt;STRONG&gt;Option 2&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Disable the SNI Host Check on Jetty (Read more: &lt;A href="https://jetty.org/docs/jetty/11/operations-guide/protocols/index.html#ssl-sni" target="_blank" rel="noopener"&gt;jetty.ssl.sniHostCheck&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;&lt;FONT size="2" color="#993366"&gt;&lt;EM&gt;This solution is applicable for Enterprise Console &amp;gt;=23.11 where the Controller uses Jetty Application server instead of GlassFish.&amp;nbsp;&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;LI-SPOILER&gt;&lt;STRONG&gt;&lt;FONT color="#FF0000"&gt;This is not a permanent solution as the below changes will revert whenever jetty is upgraded. It solves the problem until the next controller upgrade (specifically Jetty version upgrade). &lt;EM&gt;This workaround needs to be documented.&lt;/EM&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/LI-SPOILER&gt;
&lt;P&gt;This option involves changing the default value of &lt;EM&gt;sniHostCheck&lt;/EM&gt; from true to &lt;STRONG&gt;false&lt;/STRONG&gt;. And to do it, the steps are straightforward.&lt;/P&gt;
&lt;P&gt;&lt;FONT size="1 2 3 4 5 6 7"&gt;&lt;EM&gt;I assume you installed your Splunk AppDynamics controller instance on a Linux server/VM.&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;$ cd /opt/appdynamics/platform/product/controller/appserver/jetty/etc
$ cat jetty-ssl.xml
&amp;lt;?xml version="1.0"?&amp;gt;&amp;lt;!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd"&amp;gt;

&amp;lt;!-- ============================================================= --&amp;gt;
&amp;lt;!-- Base SSL configuration                                        --&amp;gt;
&amp;lt;!-- This configuration needs to be used together with 1 or more   --&amp;gt;
&amp;lt;!-- of jetty-https.xml or jetty-http2.xml                         --&amp;gt;
&amp;lt;!-- ============================================================= --&amp;gt;
&amp;lt;Configure id="Server" class="org.eclipse.jetty.server.Server"&amp;gt;

  &amp;lt;!-- =========================================================== --&amp;gt;
  &amp;lt;!-- Create a TLS specific HttpConfiguration based on the        --&amp;gt;
  &amp;lt;!-- common HttpConfiguration defined in jetty.xml               --&amp;gt;
  &amp;lt;!-- Add a SecureRequestCustomizer to extract certificate and    --&amp;gt;
  &amp;lt;!-- session information                                         --&amp;gt;
  &amp;lt;!-- =========================================================== --&amp;gt;
  &amp;lt;New id="sslHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration"&amp;gt;
    &amp;lt;Arg&amp;gt;&amp;lt;Ref refid="httpConfig"/&amp;gt;&amp;lt;/Arg&amp;gt;
    &amp;lt;Call name="addCustomizer"&amp;gt;
      &amp;lt;Arg&amp;gt;
        &amp;lt;New class="org.eclipse.jetty.server.SecureRequestCustomizer"&amp;gt;
          &amp;lt;Arg name="sniRequired" type="boolean"&amp;gt;&amp;lt;Property name="jetty.ssl.sniRequired" default="false"/&amp;gt;&amp;lt;/Arg&amp;gt;
          &amp;lt;Arg name="sniHostCheck" type="boolean"&amp;gt;&amp;lt;Property name="jetty.ssl.sniHostCheck" default="true"/&amp;gt;&amp;lt;/Arg&amp;gt;
          &amp;lt;Arg name="stsMaxAgeSeconds" type="int"&amp;gt;&amp;lt;Property name="jetty.ssl.stsMaxAgeSeconds" default="-1"/&amp;gt;&amp;lt;/Arg&amp;gt;
          &amp;lt;Arg name="stsIncludeSubdomains" type="boolean"&amp;gt;&amp;lt;Property name="jetty.ssl.stsIncludeSubdomains" default="false"/&amp;gt;&amp;lt;/Arg&amp;gt;
        &amp;lt;/New&amp;gt;
      &amp;lt;/Arg&amp;gt;
    &amp;lt;/Call&amp;gt;
  &amp;lt;/New&amp;gt;

&amp;lt;/Configure&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As seen in the output of the &lt;STRONG&gt;jetty-ssl.xml&lt;/STRONG&gt; file, the Property default value is &lt;STRONG&gt;"true"&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;&amp;lt;Arg name="sniHostCheck" type="boolean"&amp;gt;&amp;lt;Property name="jetty.ssl.sniHostCheck" default="true"/&amp;gt;&amp;lt;/Arg&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And needs to be changed to &lt;STRONG&gt;"false"&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;&amp;lt;Arg name="sniHostCheck" type="boolean"&amp;gt;&amp;lt;Property name="jetty.ssl.sniHostCheck" default="false"/&amp;gt;&amp;lt;/Arg&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You will need to do the same change in &lt;FONT color="#FF0000"&gt;&lt;STRONG&gt;jetty-ssl.xml.j2&lt;/STRONG&gt;&lt;/FONT&gt; file as well.&lt;/P&gt;
&lt;P&gt;Changing the SNI host check value to false bypasses the check of&amp;nbsp;&lt;SPAN&gt;whether the certificate sent to the client matches the&amp;nbsp;&lt;/SPAN&gt;Host&lt;SPAN&gt;&amp;nbsp;header.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Finally, restart the controller app server. After the restart is completed, you will be able to open your Splunk AppDynamics controller via HTTPs on port 8181.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="HTTPs.jpg" style="width: 999px;"&gt;&lt;img src="https://community.splunk.com/t5/image/serverpage/image-id/38130i8C83D50C1B1244A5/image-size/large?v=v2&amp;amp;px=999" role="button" title="HTTPs.jpg" alt="HTTPs.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Osama Abbas&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 22 Jun 2026 23:19:53 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Share-a-Tip/Solve-Splunk-AppDynamics-HTTP-Error-400-Invalid-SNI-HTTP-Error/m-p/741558#M83</guid>
      <dc:creator>Osama_Abbas1</dc:creator>
      <dc:date>2026-06-22T23:19:53Z</dc:date>
    </item>
  </channel>
</rss>

