5

私は奇妙な問題を抱えています。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 に何かまたは何らかのセキュリティ ポリシーを追加する必要があります。また、コンソールとウェブサイトの両方を使用して、ローカル開発マシンに正常に接続できることを指摘するだけです。

誰にもアイデアはありますか?

4

4 に答える 4

2

システムに証明書をインストールしましたか? Windows を実行している場合は、管理コンソール ([実行] -> [mmc]) の下の [ローカル コンピューター/個人用フォルダー] または [信頼済みフォルダー] にある必要があります。

于 2010-06-21T12:46:46.253 に答える
1

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

  • ASPNET
  • ネットワークサービス
  • 認証済みユーザー

例えば

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

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

于 2009-12-12T01:02:36.930 に答える
0

これと同じ問題がありました.ASP.NET DefaultAppPool/Network Serviceユーザーを追加しても役に立ちませんでした。

最後に、信頼されたルート証明書フォルダーにある場合、ASP.NET Web サービスが証明書にアクセスできないことがわかりました (コンソール アプリはアクセスできますが)。個人証明書フォルダーにドラッグして戻し、コンソールと Web アプリの両方からメソッドを呼び出すことができるようになりました。

于 2015-03-30T22:25:28.263 に答える
-2

X509Certificate を X509Certificate2 に変更し、X509CertificateCollection を X509Certificate2Collection に変更します

于 2011-07-19T13:12:56.590 に答える