您好,我正在使用HTTPS提供Restful服务(DotNet 4.0 WCF VS 2012)。我的客户端将附加证书(证书由我(.cer文件)提供)我需要从请求中获取证书并读取其信息以对其进行身份验证,序列号,Thumprint在我需要时存储在数据库中检查一下。
我做了SSL并将cer文件共享给客户端。
我使用以下代码回读我的证书
C#代码启动
if(OperationContext.Current.ServiceSecurityContext.AuthorizationContext.ClaimSets == null) 抛出新的异常(“No claimset service configured wrong”);
if (OperationContext.Current.ServiceSecurityContext.AuthorizationContext.ClaimSets.Count <= 0)
throw new Exception ("No claimset service configured wrong");
var cert = ((X509CertificateClaimSet)OperationContext.Current.ServiceSecurityContext.
AuthorizationContext.ClaimSets[0]).X509Certificate;
C#代码结束
在上面的代码中我总是得到claimSets.Count = 0。
我需要在服务器web.config中进行任何设置,我在服务器端web.config中进行了以下设置
'安全模式=“运输”' 'transport clientCredentialType =“None”' '安全'
请告诉我是否缺少客户端或服务器端的任何设置。
在客户端,我使用以下代码将cer添加到请求
C#Code Start
X509Certificate2 cert = new X509Certificate2 ("C:\\xxxxxx.cer");
System.Net.ServicePointManager.ServerCertificateValidationCallback =
delegate(Object obj, X509Certificate X509certificate, X509Chain chain, System.Net.Security.SslPolicyErrors errors)
{
return true;
};
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(xxxxx.Text.Trim());
webRequest.ClientCertificates.Add(cert);
C#代码结束
我的客户端web.config文件中没有任何特殊设置。
答案 0 :(得分:0)
为什么使用clientCredentialType="None"
而不是clientCredentialType="Certificate"
?
您的客户也可能不会发送任何证书。尝试在客户端上的App.config中启用网络跟踪 - instructions here。这应该创建具有更多调试信息的network.log。在日志中查找SecureChannel
个条目。