2009-12-10 83 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

答えて

1

ASP.NETは別のアカウントで実行されるので、WinHttpCertCfg.exeツールを使用して、次のアカウントがローカルコンピュータの個人用または信頼済みフォルダーにインストールする証明書にアクセスできるようにする必要があります。例えば

  • ASPNET
  • ネットワークサービス
  • 認証されたユーザー

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

ここで、証明書名は証明書のフレンドリ名です。 hereからツールと情報を入手できます。

2

システムに証明書をインストールしましたか?ウィンドウを実行している場合、管理コンソール(実行 - > mmc)の下のローカルコンピュータ/個人または信頼されたフォルダにあるはずです。

-2

変更X509Certificate2へのX509CertificateともX509Certificate2Collection

+0

-1 - これはまったく違いはありません。 –

0

にX509CertificateCollection私はこの同じ問題を抱えていた - ASP.NETのDefaultAppPool /ネットワークサービスのユーザーを追加することは、しかし、私を助けていませんでした。

私は最終的に、信頼できるルート証明書フォルダ(コンソールアプリケーションでも可能です)にあったときにASP.NET Webサービスが証明書にアクセスできなかったことを知りました。 Personal Certificatesフォルダにドラッグして、コンソールとWebアプリケーションの両方からメソッドを呼び出すことができます。

関連する問題