2009-12-10 3 views
5

문제가 계속 발생했습니다. TCP/SSL을 통해 Apple 서버에 연결하려고합니다. 푸시 알림을 위해 Apple에서 제공 한 클라이언트 인증서를 사용하고 있습니다. 로컬 신뢰할 수있는 루트 인증서와 로컬 개인 인증서 폴더에 내 서버 (Win2k3)에 인증서를 설치했습니다.SslStream.AuthenticateAsClient 예외 (메시지 형식이 잘못되었습니다.)

이제는 클래스 라이브러리를 가지고 있는데,이 클래스 라이브러리를 서버에서 실행되는 콘솔 응용 프로그램에서 호출하면 완전히 작동하지만 asp.net 페이지 나 asmx에서 해당 클래스 라이브러리를 호출 할 때 웹 서비스 다음 예외가 발생합니다.

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

답변

1

ASP.NET은 다른 계정으로 실행되므로 WinHttpCertCfg.exe 도구를 사용해야 다음 계정이 로컬 컴퓨터 개인/신뢰할 수있는 폴더에 설치해야하는 인증서에 액세스 할 수 있습니다. 예를 들어,

  • ASPNET
  • 네트워크 서비스
  • 인증 된 사용자

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

여기서 certificate name은 인증서의 친숙한 이름입니다. here에서 도구 및 정보를 얻을 수 있습니다.

2

시스템에 인증서를 설치 했습니까? 창을 실행중인 경우 관리 콘솔 (실행 -> mmc) 아래의 로컬 컴퓨터/개인 또는 신뢰할 수있는 폴더에 있어야합니다. 하지만 나에게 도움이되지 않았다 ASP.NET을 DefaultAppPool/네트워크 서비스 사용자를 추가 -

-2

변경 X509Certificate에 X509Certificate2과도 X509CertificateCollection X509Certificate2Collection

+0

-1 -이 전혀 차이가 있습니다. –

0

에 나는이 같은 문제가 있었다.

마침내 ASP.NET 웹 서비스가 신뢰할 수있는 루트 인증서 폴더에 있었을 때 인증서에 액세스 할 수 없음을 알았습니다 (콘솔 응용 프로그램도 가능함). 개인 인증서 폴더로 다시 드래그하여 콘솔 및 웹 앱에서 메소드를 호출 할 수 있습니다.