<?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 ServicePointManager.ServerCertificateValidationCallback Security Flaw In sdk-5.4P1 in Software Development Kit (SDK) and API Discussions</title>
    <link>https://community.netapp.com/t5/Software-Development-Kit-SDK-and-API-Discussions/ServicePointManager-ServerCertificateValidationCallback-Security-Flaw-In-sdk-5/m-p/119837#M1966</link>
    <description>&lt;P&gt;In netapp-manageability-sdk-5.4P1-dotnet-bindings\lib\common\netapp-manage.dll, the &lt;FONT color="#00CCFF"&gt;NaServer &lt;/FONT&gt;class has the following code:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000"&gt;// NetApp.NaServer&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000FF"&gt;static&lt;/FONT&gt; NaServer()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#00CCFF"&gt;NaServer&lt;/FONT&gt;.logger = LogManager.GetLogger(typeof(&lt;FONT color="#00CCFF"&gt;NaServer&lt;/FONT&gt;));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#00CCFF"&gt;NaServer&lt;/FONT&gt;.NMSDK_VERSION = "5.3.1";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#00CCFF"&gt;NaServer&lt;/FONT&gt;.NMSDK_PLATFORM = &lt;FONT color="#00CCFF"&gt;NaServer&lt;/FONT&gt;.GetPlatformInfo();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#00CCFF"&gt;NaServer&lt;/FONT&gt;.NMSDK_LANGUAGE = "DotNet";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#00CCFF"&gt;NaServer&lt;/FONT&gt;.NMSDK_BINDINGS = "1";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#00CCFF"&gt;NaServer&lt;/FONT&gt;.InitializeSecurity();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000FF"&gt;private static void&lt;/FONT&gt; InitializeSecurity()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#00CCFF"&gt;ServicePointManager&lt;/FONT&gt;.ServerCertificateValidationCallback = (&lt;FONT color="#00CCFF"&gt;RemoteCertificateValidationCallback&lt;/FONT&gt;)&lt;FONT color="#00CCFF"&gt;Delegate&lt;/FONT&gt;.Combine(&lt;FONT color="#00CCFF"&gt;ServicePointManager&lt;/FONT&gt;.ServerCertificateValidationCallback, &lt;FONT color="#0000FF"&gt;new&lt;/FONT&gt; &lt;FONT color="#00CCFF"&gt;RemoteCertificateValidationCallback&lt;/FONT&gt;(&lt;FONT color="#00CCFF"&gt;NaServer&lt;/FONT&gt;.ValidateServerCertificate));&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000FF"&gt;private static bool&lt;/FONT&gt; ValidateServerCertificate(&lt;FONT color="#0000FF"&gt;object&lt;/FONT&gt; sender, &lt;FONT color="#00CCFF"&gt;X509Certificate&lt;/FONT&gt; certificate, &lt;FONT color="#00CCFF"&gt;X509Chain&lt;/FONT&gt; chain, &lt;FONT color="#00CCFF"&gt;SslPolicyErrors&lt;/FONT&gt; sslPolicyErrors)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#0000FF"&gt;return&lt;/FONT&gt; sender.GetType().ToString() == &lt;FONT color="#993300"&gt;"System.Net.HttpWebRequest"&lt;/FONT&gt;;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;(Note, this code was simply gathered by using ILSpy on the DLL, so it may not be exactly the same as the source code.)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please note that the &lt;FONT color="#00CCFF"&gt;ServicePointManager&lt;/FONT&gt; is global for the entire process.&amp;nbsp; Therefore, when you attach a delegate method to the ServicePointManager.ServerCertificateValidationCallback, it applies to the entire process.&amp;nbsp; If my process now makes a web request to any Url with an invalid SSL certificate, your code will cause it to ignore the error.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;To apply the handler to just your web requests, consider setting '&lt;EM&gt;ConnectionGroupName&lt;/EM&gt;', or perhaps just the '&lt;EM&gt;UserAgent&lt;/EM&gt;' property of the &lt;FONT color="#0000FF"&gt;object&lt;/FONT&gt;&amp;nbsp;&lt;EM&gt;&lt;STRONG&gt;sender&lt;/STRONG&gt; &lt;/EM&gt;parameter being passed in (obviously make sure it's a &lt;FONT color="#00CCFF"&gt;WebRequest&lt;/FONT&gt; type and cast it).&amp;nbsp; If one of those properties matches your custom value, then you can probably be sure that the request was generated by your code and you can choose to handle the certificate value any way you want.&amp;nbsp; However, if it does not match, you should:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000FF"&gt;return&lt;/FONT&gt; sslPolicyErrors == System.Net.Security.&lt;FONT color="#00CCFF"&gt;SslPolicyErrors&lt;/FONT&gt;.None;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you in advance.&lt;/P&gt;</description>
    <pubDate>Wed, 04 Jun 2025 20:39:23 GMT</pubDate>
    <dc:creator>KevinAG</dc:creator>
    <dc:date>2025-06-04T20:39:23Z</dc:date>
    <item>
      <title>ServicePointManager.ServerCertificateValidationCallback Security Flaw In sdk-5.4P1</title>
      <link>https://community.netapp.com/t5/Software-Development-Kit-SDK-and-API-Discussions/ServicePointManager-ServerCertificateValidationCallback-Security-Flaw-In-sdk-5/m-p/119837#M1966</link>
      <description>&lt;P&gt;In netapp-manageability-sdk-5.4P1-dotnet-bindings\lib\common\netapp-manage.dll, the &lt;FONT color="#00CCFF"&gt;NaServer &lt;/FONT&gt;class has the following code:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000"&gt;// NetApp.NaServer&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000FF"&gt;static&lt;/FONT&gt; NaServer()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#00CCFF"&gt;NaServer&lt;/FONT&gt;.logger = LogManager.GetLogger(typeof(&lt;FONT color="#00CCFF"&gt;NaServer&lt;/FONT&gt;));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#00CCFF"&gt;NaServer&lt;/FONT&gt;.NMSDK_VERSION = "5.3.1";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#00CCFF"&gt;NaServer&lt;/FONT&gt;.NMSDK_PLATFORM = &lt;FONT color="#00CCFF"&gt;NaServer&lt;/FONT&gt;.GetPlatformInfo();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#00CCFF"&gt;NaServer&lt;/FONT&gt;.NMSDK_LANGUAGE = "DotNet";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#00CCFF"&gt;NaServer&lt;/FONT&gt;.NMSDK_BINDINGS = "1";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#00CCFF"&gt;NaServer&lt;/FONT&gt;.InitializeSecurity();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000FF"&gt;private static void&lt;/FONT&gt; InitializeSecurity()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#00CCFF"&gt;ServicePointManager&lt;/FONT&gt;.ServerCertificateValidationCallback = (&lt;FONT color="#00CCFF"&gt;RemoteCertificateValidationCallback&lt;/FONT&gt;)&lt;FONT color="#00CCFF"&gt;Delegate&lt;/FONT&gt;.Combine(&lt;FONT color="#00CCFF"&gt;ServicePointManager&lt;/FONT&gt;.ServerCertificateValidationCallback, &lt;FONT color="#0000FF"&gt;new&lt;/FONT&gt; &lt;FONT color="#00CCFF"&gt;RemoteCertificateValidationCallback&lt;/FONT&gt;(&lt;FONT color="#00CCFF"&gt;NaServer&lt;/FONT&gt;.ValidateServerCertificate));&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000FF"&gt;private static bool&lt;/FONT&gt; ValidateServerCertificate(&lt;FONT color="#0000FF"&gt;object&lt;/FONT&gt; sender, &lt;FONT color="#00CCFF"&gt;X509Certificate&lt;/FONT&gt; certificate, &lt;FONT color="#00CCFF"&gt;X509Chain&lt;/FONT&gt; chain, &lt;FONT color="#00CCFF"&gt;SslPolicyErrors&lt;/FONT&gt; sslPolicyErrors)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#0000FF"&gt;return&lt;/FONT&gt; sender.GetType().ToString() == &lt;FONT color="#993300"&gt;"System.Net.HttpWebRequest"&lt;/FONT&gt;;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;(Note, this code was simply gathered by using ILSpy on the DLL, so it may not be exactly the same as the source code.)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please note that the &lt;FONT color="#00CCFF"&gt;ServicePointManager&lt;/FONT&gt; is global for the entire process.&amp;nbsp; Therefore, when you attach a delegate method to the ServicePointManager.ServerCertificateValidationCallback, it applies to the entire process.&amp;nbsp; If my process now makes a web request to any Url with an invalid SSL certificate, your code will cause it to ignore the error.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;To apply the handler to just your web requests, consider setting '&lt;EM&gt;ConnectionGroupName&lt;/EM&gt;', or perhaps just the '&lt;EM&gt;UserAgent&lt;/EM&gt;' property of the &lt;FONT color="#0000FF"&gt;object&lt;/FONT&gt;&amp;nbsp;&lt;EM&gt;&lt;STRONG&gt;sender&lt;/STRONG&gt; &lt;/EM&gt;parameter being passed in (obviously make sure it's a &lt;FONT color="#00CCFF"&gt;WebRequest&lt;/FONT&gt; type and cast it).&amp;nbsp; If one of those properties matches your custom value, then you can probably be sure that the request was generated by your code and you can choose to handle the certificate value any way you want.&amp;nbsp; However, if it does not match, you should:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000FF"&gt;return&lt;/FONT&gt; sslPolicyErrors == System.Net.Security.&lt;FONT color="#00CCFF"&gt;SslPolicyErrors&lt;/FONT&gt;.None;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you in advance.&lt;/P&gt;</description>
      <pubDate>Wed, 04 Jun 2025 20:39:23 GMT</pubDate>
      <guid>https://community.netapp.com/t5/Software-Development-Kit-SDK-and-API-Discussions/ServicePointManager-ServerCertificateValidationCallback-Security-Flaw-In-sdk-5/m-p/119837#M1966</guid>
      <dc:creator>KevinAG</dc:creator>
      <dc:date>2025-06-04T20:39:23Z</dc:date>
    </item>
  </channel>
</rss>

