I'm making an application that involves a website on localhost as a user interface with Asp.net Core and SignalR Core.
My problem is that I get an authentication exception when starting the connection.
I know this happens because I haven't ran dotnet dev-certs https --trust
. But I can't expect an average user to run this command or have the dotnet SDK installed at all.
I've tried using
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
in my Startup.cs (and other places, but I understand that it's a global setting. in any case it was executed before the HubConnection) to no avail. I also tried setting a new HttpMessageHandlerFactory, but the documentation tells me that doesnt affect Websockets.
I don't believe this is a solution, because I can't use a different HttpClient (unless I'm mistaken)
As you can see, I'm not connecting to https at all:
connection = new HubConnectionBuilder().WithUrl("http://localhost:5000/MiniLyokoHub" ).Build();
So I don't see why it is even trying to get the certificate.
Here is the full error: https://pastebin.com/1ELbeWtc
How can I get around this issue? I don't need a certificate, since the user will be connecting to their own localhost. Or should I just not use websockets?
If your SignalR application transmits sensitive information between the client and server, use SSL for the transport.
Supported server IIS versions Also note that for SignalR to use WebSocket, IIS 8 or IIS 8 Express must be used, the server must be using Windows 8, Windows Server 2012, or later, and WebSocket must be enabled in IIS.
SignalR Hubs are a way to logically group connections as documented. Take an example of a chat application. A group of users could be part of the same hub which allows for sending messages between users in the group. The hubName here can be any string which is used to scope messages being sent between clients.
When connecting to HTTPS, to always verify the SSL certificate in SignalR Core client you should do this in HttpMessageHandlerFactory
configs. Use HttpConnectionOptions
in WithUrl
method like this:
connection = new HubConnectionBuilder()
.WithUrl("https://localhost:443/MiniLyokoHub", (opts) =>
{
opts.HttpMessageHandlerFactory = (message) =>
{
if (message is HttpClientHandler clientHandler)
// always verify the SSL certificate
clientHandler.ServerCertificateCustomValidationCallback +=
(sender, certificate, chain, sslPolicyErrors) => { return true; };
return message;
};
})
.Build();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With