this code worked in IIS:
Explanation of the Code:
Obtaining Host and Port:
var host = context.Request.Host.Host; var port = context.Request.Host.Port ?? 44318; Here, you're getting the host (hostname) from the HTTP request context using context.Request.Host.Host. If the port isn't explicitly specified, you're defaulting it to 44318. This would typically be a fallback to a port used by the server.
Creating a TCP Client and Establishing SSL:
using (var client = new TcpClient(host, port))
{
using (var sslStream = new SslStream(client.GetStream(), false, new
RemoteCertificateValidationCallback(ValidateServerCertificate!),
null))
{
sslStream.AuthenticateAsClient(host);
localCertificate = sslStream.RemoteCertificate as
X509Certificate2;
}
}
A TcpClient is being created that connects to the specified host and port. Then, an SslStream is created using the network stream from the TCP client. SslStream allows you to securely communicate using SSL/TLS by encrypting data. The second parameter (false) specifies that you won't need to leave the stream open after the SslStream is disposed.
You're passing in a RemoteCertificateValidationCallback delegate (ValidateServerCertificate!) that will handle validation of the server's certificate.
sslStream.AuthenticateAsClient(host) authenticates the client to the server, initiating an SSL/TLS handshake. Finally, you're obtaining the remote server's certificate (sslStream.RemoteCertificate) and casting it to X509Certificate2. Certificate Validation Callback:
private static bool ValidateServerCertificate(object sender,
X509Certificate? certificate, X509Chain chain, SslPolicyErrors
sslPolicyErrors)
{
if (certificate == null)
{
return false;
}
if (sslPolicyErrors == SslPolicyErrors.None)
{
return true; // No errors, certificate is valid
}
return false;
}
This callback function is used during the SSL handshake to validate the server's certificate. If no certificate is received (certificate == null), the validation fails, returning false. If no SSL policy errors are found (SslPolicyErrors.None), the validation is considered successful (true). Otherwise, if any errors are present, it returns false, rejecting the certificate.