2

我已经设置了一个 WebAPI 服务来要求 https 并打开以接受客户端证书。SSL 部分工作正常。我正在使用 WebRequestHandler 将证书(真实证书,而不是测试证书)附加到请求中,但是当我在 WebAPI 控制器中访问 request.GetClientCertificate 时,证书为空。

ssl 证书使用带有 clientcertnegotiation=enable 参数的“netsh http add sslcert”绑定到端口。

我正在使用 IISExpress,并通过添加<access sslFlags="Ssl, SslNegotiateCert" />到安全节点并<clientCertificateMappingAuthentication enabled="true" />在身份验证节点下设置来修改 applicationhost.config。

我没有收到任何错误,只是空值。

我唯一的线索是当我在浏览器中打开 WebAPI 时,系统会提示我输入 ClientCertificate,而我在代码中添加到 WebRequestHandler 的那个不在列表中。

将证书用作客户端证书有什么要求?这个问题(IISExpress ClientCertificate Setup Steps)暗示这可能是我的问题。

4

1 回答 1

1

要要求证书,除了 SslNegotiateCert 之外,您还需要设置 SslRequireCert。通常不需要映射。

对客户端证书的要求是,该证书的颁发者必须是受信任的颁发者(从服务的角度来看),这意味着“受信任的 CA”列表中......并且颁发者证书必须包含“客户端身份验证”的预期目的。

于 2013-05-04T11:47:55.560 回答