我已经看到了与此问题相关的几个问题,我已经尝试了很多其中提出的想法但没有成功。
以下是我的情况:
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;
答案 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;解决方案,这个并不是最好的,但可能有所帮助。