2009-12-10 99 views
5

我遇到了一個奇怪的問題。我正嘗試通過TCP/SSL連接到Apple服務器。我正在使用Apple提供的客戶端證書進行推送通知。我在本地受信任的根證書和本地個人證書文件夾中的服務器(Win2k3)上安裝了證書。SslStream.AuthenticateAsClient異常(消息格式錯誤)

現在我有一個類庫處理該連接,當我從服務器運行的控制檯應用程序調用此類庫時它工作得很好,但是當我從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中添加一些或某種安全策略。也只是要指出,我可以連接我的本地開發機器與控制檯和網站都很好。

任何人有任何想法?

+1

嗨我現在面臨同樣的問題。你是如何解決這個問題的?請幫忙 – ramesh 2013-09-03 03:09:50

回答

1

ASP.NET運行在不同的帳戶下,因此您必須使用WinHttpCertCfg.exe工具來允許以下帳戶訪問您應該在本地計算機個人/受信任文件夾中安裝的證書。

  • ASPNET
  • 網絡服務
  • 驗證用戶

例如

winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "CertificateName" -a "ASPNET" 

其中證書名稱是證書的友好名稱。您可以從here獲取工具和信息。

2

您是否在系統上安裝了證書?如果您正在運行Windows,它應該位於管理控制檯下的本地計算機/個人或可信文件夾中(運行 - > mmc)。

-2

變化x509證書到X509Certificate2也X509CertificateCollection到X509Certificate2Collection

+0

-1 - 這完全沒有區別。 – 2014-07-10 10:22:10

0

我有同樣的問題 - 添加ASP.NET默認應用/網絡服務用戶並沒有幫助我,雖然。

我終於想通了,在ASP.NET Web服務無法訪問證書時,它在受信任的根證書文件夾中(即使控制檯應用程序即可)。我將它拖回個人證書文件夾,現在可以從控制檯和網絡應用程序中調用該方法。