我在通过 SSL 使用 Java Web 服务时遇到问题。
我有两种方法,一种使用.net4.0,一种使用.net2.0。
不幸的是.net4.0方法不起作用。但是,早期版本(2.0)可以正常工作:
class Program
{
static void Main(string[] args)
{
try
{
Srv.Service client = new Srv.Service ();
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
string findValue = "IssuerName";
X509Certificate2Collection certsCollection = store.Certificates.Find(X509FindType.FindByIssuerName, findValue, false);
X509Certificate2 cert;
if (certsCollection.Count > 0)
{
cert = certsCollection[0];
client.ClientCertificates.Add(cert); // Only in .net 2.0
}
client.MethodA();
}
catch (Exception e)
{
string msg = e.Message;
}
}
}
之后我在.net4.0客户端做了类似的事情(抛出“无法使用权限 {server_name} 建立 SSL/TLS 安全通道”异常):
class Program
{
static void Main(string[] args)
{
try
{
Srv.ServiceClient srv = new Srv.ServiceClient();
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
string findValue = "IssuerName";
X509Certificate2Collection certsCollection = store.Certificates.Find(X509FindType.FindByIssuerName, findValue, false);
X509Certificate2 cert;
if (certsCollection.Count > 0)
{
cert = certsCollection[0];
srv.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2();
srv.ClientCredentials.ClientCertificate.Certificate = cert;
}
client.MethodA();
}
catch (Exception e)
{
string msg = e.Message;
}
}
}
为什么几乎相同的代码在 2.0 中运行,而在 4.0 中抛出异常?
或者我在第二个例子中做错了?
重写 ServicePointManager.ServerCertificateValidationCallback 没有帮助...
为什么我无法添加用户证书Add4.0 中的方法就像在 2.0 框架中完成的那样吗?
Edit:我没有使用 IIS。我正在使用 JBoss 上托管的 Web 服务。
在第二个例子中我得到以下异常:
无法使用权限 {server_name} 建立 SSL/TLS 安全通道