我遇到了一些奇怪的问题。我试图通过TCP / SSL连接到Apple服务器。我使用Apple提供的客户端证书进行推送通知。我在本地受信任的根证书和本地个人证书文件夹中的服务器(Win2k3)上安装了证书。
现在我有一个处理该连接的类库,当我从服务器运行的控制台应用程序调用这个类库时它工作得非常好,但是当我从asp.net页面或asmx web调用该类库时服务我得到以下异常。
对SSPI的调用失败,请参阅内部异常。收到的消息是意外的或格式错误。
这是我的代码:
X509Certificate cert = new X509Certificate(certificateLocation, certificatePassword);
X509CertificateCollection certCollection = new X509CertificateCollection(new X509Certificate[1] { cert });
// OPEN the new SSL Stream
SslStream ssl = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
ssl.AuthenticateAsClient(ipAddress, certCollection, SslProtocols.Default, false);
ssl.AuthenticateAsClient
是抛出错误的地方。
这让我疯了。如果控制台应用程序可以很好地连接,那么验证失败的asp.net网络层安全性肯定存在一些问题......不确定,可能需要在web.config中添加一些或某种安全策略。还要指出我可以通过控制台和网站在我的本地开发机器上正常连接。
任何人都有任何想法?
答案 0 :(得分:2)
您是否在系统上安装了证书?如果您正在运行Windows,它应该位于管理控制台下的本地计算机/个人或可信文件夹中(运行 - > mmc)。
答案 1 :(得分:1)
ASP.NET在不同的帐户下运行,因此您必须使用WinHttpCertCfg.exe
工具允许以下帐户访问您应在本地计算机个人/可信任文件夹中安装的证书。
e.g。
winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "CertificateName" -a "ASPNET"
其中证书名称是证书的友好名称。您可以从here获取工具和信息。
答案 2 :(得分:0)
我遇到了同样的问题 - 虽然添加ASP.NET DefaultAppPool / Network Service用户并没有帮助我。
我终于发现ASP.NET Web服务在受信任的根证书文件夹中时无法访问证书(即使控制台应用程序可以)。我将其拖回Personal Certificates文件夹,现在可以从控制台和Web应用程序调用该方法。
答案 3 :(得分:-2)
将X509Certificate更改为X509Certificate2,并将X509CertificateCollection更改为X509Certificate2Collection