我计划使用SignalR通知客户。
在生产中,我们被迫使用客户端x509证书来使用反向代理对客户端进行身份验证。它还将在连接到我们的IIS网络服务器之前终止SSL。
这会有用吗?
我找不到任何api来添加客户端证书或使用WebRequestHandler。
我不可能是第一个。
/ HAXEN
答案 0 :(得分:2)
关于使用基于客户端的证书:SingalR中没有任何内容允许这样做,我浏览了所有来源,显然这是一个疏忽,而且非常讨厌。这是我发现的黑客攻击:
public class MyHttpClient: IHttpClient
{
DefaultHttpClient _client = new DefaultHttpClient();
X509Certificate Certificate;
Action<IRequest> SpiceAction(Action<IRequest> prepareRequest)
{
return new Action<IRequest>(req =>
{
var fi = typeof(HttpWebRequestWrapper).GetField("_request",
BindingFlags.NonPublic | BindingFlags.Instance);
HttpWebRequest request = (HttpWebRequest) fi.GetValue(req);
request.ClientCertificates.Add(Certificate);
prepareRequest(req);
});
}
public Task<IResponse> Get(string url, Action<IRequest> prepareRequest)
{
return _client.Get(url, SpiceAction(prepareRequest));
}
public Task<IResponse> Post(string url, Action<IRequest> prepareRequest,
IDictionary<string, string> postData)
{
return _client.Post(url, SpiceAction(prepareRequest), postData);
}
}
然后代替:
var conn = new Connection("https://xxxxxxxx");
conn.Start()
做的:
var conn = new Connection("https://xxxxxxxx");
conn.Start(new MyHttpClient() { Certificate = xxxxxxx });
答案 1 :(得分:1)
我们开始使用,版本1.1的SignalR客户端证书支持开箱即用。
大!