为了解决SSL终止负载均衡器的问题(它不会将客户端证书转发给应用程序服务器),我们的ISP已经配置了我们的环境,以便客户端证书在HTTP头中转发到真实服务器(作为X-Client-Cert)。
我将使用映射到他们已签发的证书的序列号的PIN来验证客户端。但是如何从自定义标头获取证书?
答案 0 :(得分:6)
我假设您知道可以使用
获取证书数据String s = Request.Headers["X-Client-Cert"];
现在的问题是证书添加到标题的格式。我认为它是用Base64编码的。
byte[] certdata = Convert.FromBase64String(s);
然后您可以从中创建证书对象:
X509Certificate cert = new X509Certificate(certdata);
根据负载均衡器是否检查客户端证书的有效性(以及是否已由正确的根CA签名),您必须自行检查证书的有效性。
之后您只需通过cert.GetSerialNumber();