2009-12-13 9 views
5

クライアントサイド証明書のインストール時に、「オブジェクトにキーペアの公開半分のみが含まれています。秘密キーも提供する必要があります」というメッセージが表示されます。私のアプリケーションは、ASP.NETプラットフォーム上で動作するVC#.NETアプリケーションです。また、WSE 2.0を使用して証明書をSOAP要求にインポートします。オブジェクトにキーペアの公開半分だけが含まれています

調査の結果、この例外はSystem.Security.Cryptography.CryptographicException型であることが判明しました。

私はsubject-distinguished-nameで同様の証明書を見つけることができたので、私のWSE設定が正しく構成されていることはとても肯定的です。どんなアイデアも高く評価されます。

答えて

12

私は最近同じ問題を抱えていました。私のために働いたone explanation hereが見つかりました。具体的には、秘密鍵のアクセス許可。完全な情報は下にコピーされます。

私が最初に なりカップルの事があります:あなたは、この証明書の秘密鍵を

  1. を持っていますか?
  2. あなた専用の キーにアクセスするアプリケーションを許可しましたか?

あなたがWindowsの証明書ストアで証明書 を表示して 秘密鍵を持っているかどうかを確立することができます。 これにアクセスするには、次の手順を実行します。

  1. Windowsの[スタート]メニューから[ファイル名を指定して実行]を選択します。
  2. Open:フィールドにmmcと入力します。 [OK]をクリックします。
  3. [ファイル]メニューの[スナップインの追加と削除]を選択します。
  4. [追加]ボタンをクリックします。
  5. [利用可能なスタンドアロンスナップイン]の一覧から[証明書]を選択します。 [追加]ボタンをクリックします。
  6. [コンピュータアカウント]を選択します。次へをクリックします。
  7. [ローカルコンピュータ]を選択します。 Finishをクリックします。
  8. [閉じる]をクリックします。
  9. [OK]をクリックします。
    1. コンソールルートの[証明書]ノードを展開し、 パーソナルストアを開きます。
    2. 使用している証明書をダブルクリックします。秘密の キーをお持ちの場合、ダイアログに「 秘密鍵があり、これは 証明書に対応しています」というメッセージの下部に というメッセージが表示されます。

あなたは秘密鍵を持っている場合は、アプリケーションがキーにアクセスする権限 持っている を確認してください。

  1. Windowsエクスプローラを開きます。
  2. C:\ Documents and Settings \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys フォルダに移動します。
  3. を取得するためにWSEで必要となるキーを含むファイルを選択します。
  4. [ファイル]メニューから[プロパティ]を選択します。
  5. [セキュリティ]タブで、ASPNETアカウントを追加し、フル 制御オプションを選択します。
  6. 注: 1. MachineKeysフォルダのどのキーファイルが、 で証明書に関連付けられているかを確認すると、難しい場合があります。 です。 1つの簡単な方法は、 新しい証明書を作成するときに作成日時を に書き留めることです。 MachineKeys ディレクトリ内のファイルを表示するときは、対応する日付の のフィールドと の時刻を確認してください。 2. ASPNETと異なる アカウントでシステムを実行するように設定した場合は、そのアカウント を使用して、 にアクセスするためのアクセス許可を付与します。
+1

ありがとうございました。それが助けになりました。 (私は秘密鍵を持っていましたが、私のアプリケーションはアクセスできませんでした)。 – KKP

+0

どのマシンキーが証明書に対応しているかを調べるには、この回答を確認してください:http://serverfault.com/a/642279/401044 – jtate

0

が同じ例外に遭遇した後:System.Security.Cryptography.CryptographicException、オブジェクトは鍵ペアの唯一の公共の半分が含まれている、私が代わり、あまり最適なソリューションを防音しました。

状況:証明書/キールックアップはVisual Studio IIS Expressのすぐ内側で機能しましたが、Webアプリケーションが適切なIISサービスで実行されている間、私は常に「キーペアの公開半分のみを含む」例外を受け取りました。

私は、WSE3 CertificateToolを使用してファイルシステム上の秘密鍵セクションを探し出し、上記の答えに従ってASPユーザー権限を与えるためにユーザー許可設定を調整しようと試みました。

Webサービスコードに固有の新しいIISアプリケーションプールを作成し、そのプールが証明書+秘密鍵のローカルマシンの所有者として実行されるユーザーIDを設定することでした。

証明書をインストールした最終的な場所は「ローカルコンピュータ/信頼できるユーザー」でした。アプリケーションプールの所有者を変更する場合

clientToken = X509TokenProvider.CreateToken(StoreLocation.LocalMachine, 
    StoreName.TrustedPeople, "soap.partnersite.com", X509FindType.FindBySubjectName); 

アプリケーションプールIDを更新した後、何の秘密鍵ファイルの上書きが必要ではなかった:WSE3 CustomPolicyAssertion、C#.NETを使用し

関連する問題