title: Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure
body: <p>I have downloaded a trial version of a product that provides API over https. And currently inside my asp.net mvc web application I am doing the following to execute an API call to the trial version of the product:-</p>
  
  <pre><code>[HttpPost]
          [ValidateAntiForgeryToken]
          public ActionResult Create(RackJoin rj, FormCollection formValues)
          {
              string controllername = RouteData.Values["controller"].ToString();
              if (ModelState.IsValid)
              {
                  var message = "";
                  var status = "";
                  long assetid = new long();
                  XmlDocument doc = new XmlDocument();
                  using (var client = new WebClient())
                  {
                      var query = HttpUtility.ParseQueryString(string.Empty);
                      foreach (string key in formValues)
                      {
                          query[key] = this.Request.Form[key];
                      }
  
  query["username"] =  System.Web.Configuration.WebConfigurationManager.AppSettings["ApiUserName"];
  query["password"] =  System.Web.Configuration.WebConfigurationManager.AppSettings["ApiPassword"];
  string apiurl = "https://win-spdev:8400/servlets/AssetServlet";
  //code goes here…..
                      var url = new UriBuilder(apiurl);
                      url.Query = query.ToString();
  </code></pre>
  
  <p>but I will get the following exception:-</p>
  
  <blockquote>
    <p>Error occurred:System.Security.Authentication.AuthenticationException:
    The remote certificate is invalid according to the validation
    procedure. at
    System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken
    message, AsyncProtocolRequest asyncRequest, Exception exception) at
    System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken
    message, AsyncProtocolRequest asyncRequest) at
    System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32
    count, AsyncProtocolRequest asyncRequest) at
    System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32
    count, AsyncProtocolRequest asyncRequest) at
    System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32
    readBytes, AsyncProtocolRequest asyncRequest) at
    System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer,
    AsyncProtocolRequest asyncRequest) at
    System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken
    message, AsyncProtocolRequest asyncRequest) at
    System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32
    count, AsyncProtocolRequest asyncRequest) at
    System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32
    count, AsyncProtocolRequest asyncRequest) at
    System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32
    readBytes, AsyncProtocolRequest asyncRequest) at
    System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer,
    AsyncProtocolRequest asyncRequest) at
    System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken
    message, AsyncProtocolRequest asyncRequest) at
    System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32
    count, AsyncProtocolRequest asyncRequest) at
    System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32
    count, AsyncProtocolRequest asyncRequest) at
    System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32
    readBytes, AsyncProtocolRequest asyncRequest) at
    System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer,
    AsyncProtocolRequest asyncRequest) at
    System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken
    message, AsyncProtocolRequest asyncRequest) at
    System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32
    count, AsyncProtocolRequest asyncRequest) at
    System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst,
    Byte[] buffer, AsyncProtocolRequest asyncRequest) at
    System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult
    lazyResult) at System.Net.TlsStream.CallProcessAuthentication(Object
    state) at
    System.Threading.ExecutionContext.RunInternal(ExecutionContext
    executionContext, ContextCallback callback, Object state, Boolean
    preserveSyncCtx) at
    System.Threading.ExecutionContext.Run(ExecutionContext
    executionContext, ContextCallback callback, Object state, Boolean
    preserveSyncCtx) at
    System.Threading.ExecutionContext.Run(ExecutionContext
    executionContext, ContextCallback callback, Object state) at
    System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result) at
    System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size) at
    System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size)
    at System.Net.ConnectStream.WriteHeaders(Boolean async)</p>
  </blockquote>
  
  <p><strong>Baring in mind that I can call the API without any problems, if I directly call the API from my web browser as follow :-</strong></p>
  
  <pre><code>https://win-spdev:8400/servlets/AssetServlet?username=tmsservice&amp;password=test2test2&amp;assetType=Rack&amp;operation=UpdateAsset&amp;assetName=rack9090909858585&amp;accountName=GROUP&amp;siteName=test%20site&amp;productName=rackproductone
  </code></pre>
  
  <p>So is this problem related to that the API is over https , and since I am working with a trial version of the product inside my development machine should I install a valid certificate? Or the problem is not related to security certification ?
  Thanks</p>