【发布时间】:2012-06-28 15:58:17
【问题描述】:
为了解决 SSL 终止负载平衡器的问题(它不会将客户端证书转发到应用程序服务器),我们的 ISP 已配置我们的环境,以便客户端证书在 HTTP 标头中转发到真实服务器(作为 X-Client-Cert)。
我将使用映射到已颁发证书的序列号的 PIN 对客户进行身份验证。但是如何从自定义标头中获取证书?
【问题讨论】:
标签: asp.net security http-headers ssl-certificate
为了解决 SSL 终止负载平衡器的问题(它不会将客户端证书转发到应用程序服务器),我们的 ISP 已配置我们的环境,以便客户端证书在 HTTP 标头中转发到真实服务器(作为 X-Client-Cert)。
我将使用映射到已颁发证书的序列号的 PIN 对客户进行身份验证。但是如何从自定义标头中获取证书?
【问题讨论】:
标签: asp.net security http-headers ssl-certificate
我假设您知道可以使用
获取证书数据String s = Request.Headers["X-Client-Cert"];
现在的问题是证书以哪种格式添加到标题中。我会假设它是用 Base64 编码的。
byte[] certdata = Convert.FromBase64String(s);
然后您可以从中创建证书对象:
X509Certificate cert = new X509Certificate(certdata);
取决于负载均衡器是否检查客户端证书的有效性(以及它是否已由正确的根 CA 签发),您必须自己检查证书的有效性。
之后你可以通过cert.GetSerialNumber();读取序列号
【讨论】:
makecert 在本地生成它们。我正在考虑更多关于将 Base64 字符串从标头转换为 X509 证书的测试过程。