我正在尝试通过使用服务器证书来保护我们的Web服务。为了进行测试,我在IIS管理控制台上创建了一个自签名证书,并将该站点配置为使用该证书。 在IIS上,我创建了HTTPS绑定,并将其配置为使用证书。在我的webservices的虚拟路径上启用SSL并将其设置为 require 客户端证书。
右键单击证书,将其与密码一起导出到测试客户端的文件系统。
我使用以下代码使用证书作为客户端证书来调用Web服务:
SSLServiceReference.DataAccessService lService = new SSLServiceReference.DataAccessService();
X509Certificate2 lCert = new System.Security.Cryptography.X509Certificates.X509Certificate2(@"C:\Users\Dev06\Documents\TestSamsung2Cert.pfx", "qwerty");
lService.ClientCertificates.Add(lCert);
lService.Credentials = CredentialCache.DefaultNetworkCredentials;
DataSet lSet = lService.GetSites();
但是在调用GetSites()时,我收到403.7 http错误。 我究竟做错了什么?我的目的是要求使用Web服务的客户端提供此证书,以便他们只能调用它。
IIS 7
感谢您的任何指示。
答案 0 :(得分:3)
为了澄清,您不需要需要服务器和客户端使用相同的证书,事实上,为每个证书使用唯一的证书可能更好。服务器端的IIS将很满意任何客户端证书(除非您另外配置它或编写代码来检查证书并根据某些字段批准/拒绝)。也就是说,我认为这不是您遇到的问题的原因。这可能是由于客户端实际上无法访问证书或其私钥。
如果您将pfx证书“安装”到客户端计算机的证书存储区,您可能会有更好的运气。然后,您需要再次“导出”它作为.cer文件和配置对运行客户端应用程序的帐户(即网络服务)的私钥的访问。
请在此处查看此信息,如果您按照这些步骤操作(例如,将PFX安装到客户端的本地计算机存储区并配置对其私钥的访问权限),您应该开展业务:
http://msdn.microsoft.com/en-us/library/ff649203.aspx
我不确定您使用的是哪个IIS版本,但后者实际上使这个过程更容易一些。此外,我发现当事情真的很奇怪时,用WireShark这样的工具检查初始SSL握手流量会很有帮助。它可以帮助您确定问题是在客户端还是服务器上。在这种情况下,它看起来像客户端。