从Restful POST上的请求中获取证书信息

时间:2015-02-25 09:24:34

标签: wcf rest ssl certificate

您好,我正在使用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文件中没有任何特殊设置。

1 个答案:

答案 0 :(得分:0)

为什么使用clientCredentialType="None"而不是clientCredentialType="Certificate"

您的客户也可能不会发送任何证书。尝试在客户端上的App.config中启用网络跟踪 - instructions here。这应该创建具有更多调试信息的network.log。在日志中查找SecureChannel个条目。