48 lines
1.4 KiB
C#
48 lines
1.4 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Net.Security;
|
|
using System.Net.Sockets;
|
|
using System.Security.Cryptography.X509Certificates;
|
|
|
|
namespace JamesFrowen.SimpleWeb
|
|
{
|
|
internal class ClientSslHelper
|
|
{
|
|
internal bool TryCreateStream(Connection conn, Uri uri)
|
|
{
|
|
NetworkStream stream = conn.client.GetStream();
|
|
if (uri.Scheme != "wss")
|
|
{
|
|
conn.stream = stream;
|
|
return true;
|
|
}
|
|
|
|
try
|
|
{
|
|
conn.stream = CreateStream(stream, uri);
|
|
return true;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Log.Error($"Create SSLStream Failed: {e}", false);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
Stream CreateStream(NetworkStream stream, Uri uri)
|
|
{
|
|
SslStream sslStream = new SslStream(stream, true, ValidateServerCertificate);
|
|
sslStream.AuthenticateAsClient(uri.Host);
|
|
return sslStream;
|
|
}
|
|
|
|
static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
|
|
{
|
|
// Do not allow this client to communicate with unauthenticated servers.
|
|
|
|
// only accept if no errors
|
|
return sslPolicyErrors == SslPolicyErrors.None;
|
|
}
|
|
}
|
|
}
|