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

时间:2012-06-27 08:45:47

标签: asp.net security http-headers ssl-certificate

为了解决SSL终止负载均衡器的问题(它不会将客户端证书转发给应用程序服务器),我们的ISP已经配置了我们的环境,以便客户端证书在HTTP头中转发到真实服务器(作为X-Client-Cert)。

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

1 个答案:

答案 0 :(得分:6)

我假设您知道可以使用

获取证书数据
String s = Request.Headers["X-Client-Cert"];

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

byte[] certdata = Convert.FromBase64String(s);

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

X509Certificate cert = new X509Certificate(certdata);

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

之后您只需通过cert.GetSerialNumber();

阅读序列号即可