Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The SSL connection could not be established - The remote certificate is invalid because of errors in the certificate chain: PartialChain #1109

Open
Misiu opened this issue Feb 5, 2025 · 1 comment

Comments

@Misiu
Copy link

Misiu commented Feb 5, 2025

I'm trying to migrate my custom code to PnP.Framework, but sadly I have problems at the beginning.
I'm using SharePoint Server 2019 on-premise, which is available via IP address, I used etc/.hosts to assign a domain name to it.

my site is available at: https://shrserver2019te.dev.local/sites/clients/DEV-0000005094

below is my code:

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

Console.WriteLine("PNP!");

// Connect to SharePoint on-premise using PNP
string siteUrl = "https://shrserver2019te.dev.local/sites/clients/DEV-0000005094";
string userName = "dev";
string password = "xxxpassxxx";

var networkCredential = new NetworkCredential(userName, password);
var authManager = new AuthenticationManager();

using (var clientContext = authManager.GetOnPremisesContext(siteUrl, networkCredential))
{

    clientContext.ExecutingWebRequest += (sender, e) =>
    {
        e.WebRequestExecutor.WebRequest.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
    };

    clientContext.Load(clientContext.Web, web => web.Title);
    await clientContext.ExecuteQueryAsync();

    Console.WriteLine(clientContext.Web.Title);
}

Sadly, every time I try to make a simple request, I get this error:

System.Net.Http.HttpRequestException
  HResult=0x80131501
  Message=The SSL connection could not be established, see inner exception.
  Source=System.Net.Http
  StackTrace:
   at System.Net.Http.ConnectHelper.<EstablishSslConnectionAsync>d__2.MoveNext() in /_/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/ConnectHelper.cs:line 99
   at System.Threading.Tasks.ValueTask`1.get_Result() in /_/src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/ValueTask.cs:line 812
   at System.Net.Http.HttpConnectionPool.<ConnectAsync>d__103.MoveNext() in /_/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:line 1580
   at System.Threading.Tasks.ValueTask`1.get_Result() in /_/src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/ValueTask.cs:line 816
   at System.Net.Http.HttpConnectionPool.<CreateHttp11ConnectionAsync>d__105.MoveNext() in /_/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:line 1661
   at System.Threading.Tasks.ValueTask`1.get_Result() in /_/src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/ValueTask.cs:line 812
   at System.Net.Http.HttpConnectionPool.<AddHttp11ConnectionAsync>d__79.MoveNext() in /_/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:line 499
   at System.Threading.Tasks.TaskCompletionSourceWithCancellation`1.<WaitWithCancellationAsync>d__1.MoveNext() in /_/src/libraries/Common/src/System/Threading/Tasks/TaskCompletionSourceWithCancellation.cs:line 21
   at System.Threading.Tasks.ValueTask`1.get_Result() in /_/src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/ValueTask.cs:line 812
   at System.Net.Http.HttpConnectionPool.HttpConnectionWaiter`1.<WaitForConnectionWithTelemetryAsync>d__6.MoveNext() in /_/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:line 2632
   at System.Threading.Tasks.ValueTask`1.get_Result() in /_/src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/ValueTask.cs:line 812
   at System.Net.Http.HttpConnectionPool.<SendWithVersionDetectionAndRetryAsync>d__89.MoveNext() in /_/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:line 1112
   at System.Threading.Tasks.ValueTask`1.get_Result() in /_/src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/ValueTask.cs:line 812
   at System.Net.Http.AuthenticationHelper.<SendWithAuthAsync>d__17.MoveNext() in /_/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/AuthenticationHelper.cs:line 240
   at System.Threading.Tasks.ValueTask`1.get_Result() in /_/src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/ValueTask.cs:line 812
   at System.Net.Http.RedirectHandler.<SendAsync>d__4.MoveNext() in /_/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/RedirectHandler.cs:line 30
   at System.Net.Http.HttpClient.<<SendAsync>g__Core|83_0>d.MoveNext() in /_/src/libraries/System.Net.Http/src/System/Net/Http/HttpClient.cs:line 530
   at Microsoft.SharePoint.Client.ClientContextExtensions.<GetOnPremisesRequestDigestInfoAsync>d__25.MoveNext() in /_/src/lib/PnP.Framework/Extensions/ClientContextExtensions.cs:line 996
   at Microsoft.SharePoint.Client.ClientContextExtensions.<GetOnPremisesRequestDigestAsync>d__24.MoveNext() in /_/src/lib/PnP.Framework/Extensions/ClientContextExtensions.cs:line 961
   at PnP.Framework.AuthenticationManager.<>c.<ConfigureOnPremisesContext>b__77_0(Object sender, WebRequestEventArgs webRequestEventArgs) in /_/src/lib/PnP.Framework/AuthenticationManager.cs:line 1367
   at Microsoft.SharePoint.Client.ClientRuntimeContext.OnExecutingWebRequest(WebRequestEventArgs args)
   at Microsoft.SharePoint.Client.ClientRuntimeContext.FireExecutingWebRequestEvent(WebRequestEventArgs args)
   at Microsoft.SharePoint.Client.ClientRequest.SetupServerQuery(ChunkStringBuilder sb)
   at Microsoft.SharePoint.Client.ClientRequest.<ExecuteQueryToServerAsync>d__53.MoveNext()
   at Microsoft.SharePoint.Client.ClientRequest.<ExecuteQueryAsync>d__39.MoveNext()
   at Microsoft.SharePoint.Client.ClientRuntimeContext.<ExecuteQueryAsync>d__57.MoveNext()
   at Microsoft.SharePoint.Client.ClientContext.<ExecuteQueryAsync>d__23.MoveNext()
   at SharepointPnP.Program.<Main>d__0.MoveNext() in C:\Users\Misiu\source\repos\SPTest\Sharepoint.PnP\Program.cs:line 34
   at SharepointPnP.Program.<Main>(String[] args)

  This exception was originally thrown at this call stack:
    System.Net.Security.SslStream.CompleteHandshake(System.Net.Security.SslAuthenticationOptions) in SslStream.IO.cs
    System.Net.Security.SslStream.ForceAuthenticationAsync<TIOAdapter>(bool, byte[], System.Threading.CancellationToken) in SslStream.IO.cs
    System.Net.Security.SslStream.ProcessAuthenticationWithTelemetryAsync(bool, System.Threading.CancellationToken) in SslStream.IO.cs
    System.Net.Http.ConnectHelper.EstablishSslConnectionAsync(System.Net.Security.SslClientAuthenticationOptions, System.Net.Http.HttpRequestMessage, bool, System.IO.Stream, System.Threading.CancellationToken) in ConnectHelper.cs

Inner Exception 1:
AuthenticationException: The remote certificate is invalid because of errors in the certificate chain: PartialChain

The question is: How can I disable certificate validation for all requests done by PnP.Framework?

@Misiu
Copy link
Author

Misiu commented Feb 18, 2025

I'm able to do basic REST requests using simple HttpClient with a custom HttpClientHandler

internal class SharepointHttpClientHandler : HttpClientHandler
{
    public SharepointHttpClientHandler()
    {
        Credentials = new NetworkCredential("DEV", "SecurePass");
        ServerCertificateCustomValidationCallback = (_, _, _, _) => true;
    }
}

with this client, I'm able to get lists, and folders and create items.
Can a similar thing be done with PnP.Framework?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant