证书问题x.509 c#

时间:2017-09-22 06:46:15

标签: c# certificate app-config x509

我已经看到了与此问题相关的几个问题,我已经尝试了很多其中提出的想法但没有成功。

以下是我的情况:

FIRST:

当我在app.config中写这样的东西时:

    <behaviors>
  <endpointBehaviors>
    <behavior name="CustomBehavior">
      <clientCredentials>
        <clientCertificate findValue="1234*********"
            x509FindType="FindByThumbprint" 
            storeLocation="LocalMachine" storeName="Root" />
      </clientCredentials>
     </behavior>
    </endpointBehaviors>
    </behaviors>

比我看到那种沟通: “根据验证程序,远程证书无效。”

第二

     <behaviors>
  <endpointBehaviors>
    <behavior name="CustomBehavior">
      <clientCredentials>
        <clientCertificate findValue="test"
            x509FindType="FindBySubjectName" 
            storeLocation="LocalMachine" storeName="Root" />
      </clientCredentials>
     </behavior>
    </endpointBehaviors>
    </behaviors>

比我看到那种沟通: 它是许多具有该名称的证书。

我通过mmc在本地计算机上安装我的证书,此证书位于受信任的发布根目录中。此外,我检查IE是否有此证书,也有。

我尝试通过拇指印,按主题名称,发行人姓名,序列号,主题密钥标识符搜索我的证书。

更新: 我找到了解决方案!您需要添加的是:

BasicHttpBinding basicHttpBinding = new BasicHttpBinding();

        basicHttpBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;

        basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;

        EndpointAddress endpoint = new EndpointAddress("http://testasp.asmx");

        RemoteSetup.RemoteSetupServiceSoapClient client = new RemoteSetup.RemoteSetupServiceSoapClient(basicHttpBinding, endpoint);

        client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

        client.ChannelFactory.Credentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;

1 个答案:

答案 0 :(得分:0)

我遇到过类似的问题并做了类似的事情: 首先注册到ServerCertificateValidationCallback事件:

System.Net.ServicePointManager.ServerCertificateValidationCallback += 
                new RemoteCertificateValidationCallback(ValidateRemoteCertificate);

然后手动检查持久性并返回true

private static bool ValidateRemoteCertificate(object sender, X509Certificate cert, 
                                X509Chain chain, SslPolicyErrors policyErrors)
{
    bool result = false;
    if (cert.Subject.ToUpper().Contains("MY_CERT_ISSUER_NAME"))
    {
        result = true;
    }
    return result;
}

我没有发现任何&#34;正确&#34;解决方案,这个并不是最好的,但可能有所帮助。