我打算使用SignalR來通知客戶端。SignalR和客戶端證書
在生產中,我們被迫使用客戶端x509證書來使用反向代理對客戶端進行身份驗證。它還會在連接到我們的IIS網絡服務器之前終止SSL。
這項工作?
我找不到任何API來添加客戶端證書或使用WebRequestHandler。
我不能成爲第一個。
/HAXEN
我打算使用SignalR來通知客戶端。SignalR和客戶端證書
在生產中,我們被迫使用客戶端x509證書來使用反向代理對客戶端進行身份驗證。它還會在連接到我們的IIS網絡服務器之前終止SSL。
這項工作?
我找不到任何API來添加客戶端證書或使用WebRequestHandler。
我不能成爲第一個。
/HAXEN
在這裏,我們走了,帶着版本:
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()
做盒子。
太棒了!
關於使用基於客戶端證書:沒有什麼SingalR允許這樣做,我經歷了所有的資源去的,顯然這是一個監督,一個很煩人的一個。這裏是一個黑客,我發現:SignalR客戶端證書1.1支持出
var conn = new Connection("https://xxxxxxxx");
conn.Start(new MyHttpClient() { Certificate = xxxxxxx });
是的,這是我們想出的相同解決方案。仍然感到驚訝,它不包括在內。 – HAXEN