我需要在rest API客户端中使用Https相互身份验证,因为我们只获取URI,因为我们无法像WCF那样添加客户端证书。 所以我在web .config中添加了键,如下所示:
<appSettings>
<add key="URI" value="https://localhost:8080/RestfulAPI/RestfulService.svc/restfulData" />
<add key="CertificateValue" value="certficatename"/>
<add key="CertificateLocation" value="LocalMachine"/>
<add key="CertificateStoreName" value="My"/>
<add key="CertificateFindType" value="FindBySubjectName"/>
</appSettings>
我在我的客户端代码中使用它,如下所示:
X509Store store = new X509Store(ConfigurationManager.AppSettings["CertificateStoreName"], ConfigurationManager.AppSettings["CertificateLocation"]);
store.Open(OpenFlags.ReadOnly);
X509CertificateCollection certificates = store.Certificates.Find(ConfigurationManager.AppSettings["CertificateFindType"], ConfigurationManager.AppSettings["CertificateValue"], true);
X509Certificate certificate = certificates[0];
HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest;
request.ClientCertificates.Add(certificate);
HttpWebResponse response = request.GetResponse() as HttpWebResponse
这是在REST API客户端中实现相互身份验证的正确方法吗?
如果没有,有人可以用正确的方法帮助我吗?
答案 0 :(得分:0)
相互身份验证是一种客户端进程的安全功能 必须向服务器证明其身份,服务器必须证明其身份 在发送任何应用程序流量之前,向客户端发送身份 客户端到服务器的连接。
(source)
有时也称为双向SSL身份验证。
您正在做的事情表明了实现这一目标的正确意图,因为:
我唯一的建议是(如果这是一个严格的要求)通过以下方式强制执行此过程:
ServerCertificateValidationCallback
方法,您可以在验证服务器证书时添加自定义验证(或强制执行政策)X509Certificate2
和X509Certificate2Collection
课程(see here why)