使用请求标头中嵌入的SSL客户端证书

ind*_*dra 3 asp.net security ssl-certificate http-headers

为了解决SSL终止负载均衡器的问题(它不会将客户端证书转发给应用服务器),我们的ISP已经配置了我们的环境,使得客户端证书在HTTP报头中转发到真实服务器(如X- CLIENT-CERT).

我将使用映射到他们已经签发的证书的序列号的PIN来验证客户端.但是如何从自定义标头获取证书?

Rob*_*ert 6

我假设你知道你可以使用获取证书数据

String s = Request.Headers["X-Client-Cert"];
Run Code Online (Sandbox Code Playgroud)

现在的问题是证书添加到标题的格式.我认为它是在Base64中编码的.

byte[] certdata = Convert.FromBase64String(s);
Run Code Online (Sandbox Code Playgroud)

然后,您可以从中创建证书对象:

X509Certificate cert = new X509Certificate(certdata);
Run Code Online (Sandbox Code Playgroud)

根据负载均衡器是否检查客户端证书的有效性(以及是否已由正确的根CA签署),您必须自行检查证书的有效性.

之后您可以通过读取序列号 cert.GetSerialNumber();