我相信我已經找到了一種似乎可行的方式,但不像通常推薦的ServicePointManager.ServerCertificateValidationCallback方法那樣是全局性的。我開始通過使SignalR「DefaultHttpClient」類的子類,如下所示:
class CustomHttpClient : DefaultHttpClient
{
private readonly System.Net.Security.RemoteCertificateValidationCallback _serverCertificateValidationCallback;
public CustomHttpClient (System.Net.Security.RemoteCertificateValidationCallback serverCertificateValidationCallback) : base()
{
this._serverCertificateValidationCallback = serverCertificateValidationCallback;
}
protected override HttpMessageHandler CreateHandler()
{
var rv = base.CreateHandler() as WebRequestHandler;
if (this._serverCertificateValidationCallback != null)
rv.ServerCertificateValidationCallback = this._serverCertificateValidationCallback;
return rv;
}
}
現在我可以用我的自定義HttpClient的執行當我打電話「開始」在我HubConnection爲例說明如下:
var hubConnection = new HubConnection("my server url");
var myHub = hubConnection.CreateHubProxy("my hub name");
hubConnection.Start(new CustomHttpClient((sender, certificate, chain, sslPolicyErrors) =>
{
//put some validation logic here if you want to.
return true;
}));
這應該允許您按照您認爲合適的方式驗證服務器證書,但將範圍保留在當前的HubConnection上,而不是影響應用中的所有HTTP流量。
工作,謝謝。 全球不是很好,但我在測試裝配中使用它,所以它已經足夠好了。 – Dan