2011-12-30 9 views
1

別のサービスベンダーによって配布されている証明書(.pemファイル)があります。ベンダーから証明書をダウンロードし、ローカルドライブに保存しました。私のWCFクライアントでは、ローカルドライブからこの証明書をロードしようとしていますが、サービスと通信するときに「私の鍵がX.509証明書に存在しません」というエラーが表示されます。このエラーを解決するには、この証明書をローカル証明書ストアにロードする必要があると言われました。誰かが道案内をすることはできますか?ありがとう!他の証明書を自分のローカル証明書ストアにロードする方法は?

ファイルパラメータで指定されたパスから証明書を読み込む以下の機能があります。

public static X509Certificate LoadCertificate(string file) 
    { 
     try 
     { 
      return X509Certificate.CreateFromCertFile(file); 
     } 
     catch (System.Security.Cryptography.CryptographicException) 
     { 
      string filestr = File.ReadAllText(file); 

      StringBuilder sb = new StringBuilder(filestr.Remove(0, filestr.IndexOf("-----BEGIN CERTIFICATE-----"))); 

      sb.Replace("-----BEGIN CERTIFICATE-----", ""); 
      sb.Replace("-----END CERTIFICATE-----", ""); 
      //Decode 
      try 
      {  //see if the file is a valid Base64 encoded cert 
       byte[] certBytes = Convert.FromBase64String(sb.ToString()); 

       return new X509Certificate(certBytes); 
      } 
      catch (System.FormatException) 
      { 
       throw; 
      } 
     } 
    } 

私のWCFクライアントでは、LoadCertificate()関数から作成された証明書がロードされています。

public X509Certificate Certificate { get; set; } 

    ClientCredentials loginCredentials = new ClientCredentials(); 
    loginCredentials.UserName.UserName = this.UserId; 
    loginCredentials.UserName.Password = this.Password; 
    loginCredentials.ClientCertificate.Certificate = new X509Certificate2(this.Certificate); 
+1

これを右クリックして「インストール」を選択するだけです... – Yahia

+0

いくつかのコードを共有できますか?もしそうでなければ、@ヤヒアの解決策があなたの唯一のチャンスかもしれません。 –

+0

右クリックで「インストール」オプションが見つかりませんでした。また、ベンダーからの指示は、 "この証明書は.pem拡張子を持つWebサーバー上のファイルとして保存する必要があります。"です。私は証明書がインストールされる必要があるか、単に保存する必要があるかどうかは分かりません。 – Jyina

答えて

1

あなたのコードは、ユーザー名とパスワードを提供することに加えて、サーバーにクライアントを認証に証明書を使用しようとしていると言います。それはかなり奇妙ですが、私は可能であると思います。その目的でその証明書に関連付けられた秘密鍵が必要になります。これは、クライアントが通信を暗号化して、サーバーが証明書を使用してクライアントが正当であることを確認して検証できるようにするためです。 .pemファイルには公開鍵と秘密鍵の両方を入れることができますが、あなたに送信されたものはないでしょうか?

私の推測では、実際には、この証明書を使って自分自身を識別し、通信を暗号化するサーバーにクライアントを接続させたいと思うのです。その場合、クライアントが証明書をローカルにインポートするだけで、クライアントが最初に接続したときにサーバーがローカルバージョンと比較できるようにする必要があります。

Microsoftはファイルブラウザで.pemファイルをダブルクリックして、証明書インポートウィザードを開始しました。しかし、場合にはそれがあなたのために動作しません、ここではハードな方法である: - 実行 - MMC

  • ファイル -
  • を選択し、「証明書」にスナップインを追加/削除 -

    • スタート[追加]をクリックします - 選択しコンピュータアカウント - ローカルコンピュータを閉じる
    • スナップインウィンドウ今すぐOK

    • で(ローカルコンピュータ)証明書を参照します - 個人 - 証明書

    • 右クリック - すべてのタスク - インポート
  • 関連する問題