2011-08-09 17 views
3

SOAPメッセージをサードパーティのサービスに送信する非常に単純なWCFクライアントアプリケーションを作成しようとしています。すべてのメッセージにデジタル署名が必要です。より大きなアプリケーションにコードを追加する前に、それは本当に概念の証明です。C#WCFクライアントエラー「X.509証明書に秘密キーがありません」

証明書を含む.cerファイルと、秘密鍵を含む.pemファイルがあります。私がやっていることは、.cerファイルを使って証明書を読み込んでからメッセージを出してしまうことです。しかし、次のエラーが表示されます。「秘密鍵がX.509証明書に存在しません」

問題は、私が実際にWCF、デジタル証明書、秘密鍵、およびそれらのすべてについてほとんど何も知っていないということです。私はいくつかの読書をしました、私は顔が青くなるまで私はグーグルで、私はどこにもいませんでした。

.certファイルを開くと、秘密鍵が証明書に含まれていることを示す "BEGIN ENCRYPTED PRIVATE KEY"というセクションがあります。だから、なぜ私はそれが存在しないというメッセージを受けていますか?また、秘密鍵を証明書に追加する必要がある場合、どのようにすればいいですか?

ここでは基本的に何をしているのですか?私の実際のコードではありませんが、関連するすべてのものが含まれています:

MyWSClient c = new MyWSClient(); 
c.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(@"pathToFile.cer"); 
c.SomeValidCall(); 

答えて

0

私の同僚は解決策を見つけました。なぜか分かりませんが、.cerファイルではなく.derファイルを使用すると問題が解決します。これは、秘密鍵とルート証明書as.pemファイル、彼は証明書を使用して.derファイルを生成するために使用されるコマンドです:

openssl pkcs12 -export -in cert.pem -inkey private_key.pem -certfile root_cert.cer -out pkcs12.der 
+0

私は秘密鍵が.cerファイル内に通常見つからないため、これがうまくいった理由があると思います。私は過去にWindowsに読み込まれた秘密鍵を取得するために.pfxファイルを使用しなければなりませんでした。 – Edyn

0

どのようにこの証明書と鍵のペアを作成していますか?あなたは、OpenSSLを使ってPKCS#12証明書にそれらを組み合わせることができます。

openssl pkcs12 -export -in yourcert.crt -inkey yourprivkey.key -out newcert.p12 

あなたはそれが.PEM秘密鍵で動作させるために入力フォーマットでプレイする必要があるかもしれません。

+0

PKCSは、我々が提供されている証明書のタイプであるように見えます。証明書の名前に「_pkcs」が含まれているため、これを前提としています –

+0

証明書をWindows証明書ストアにインポートしていますか?その場合は、キーをエクスポート可能とマークするボックスにチェックを入れるか、WCFがキーを使用できなくなります。 – JohnC

+0

@JohnCこのチェックボックスはどこですか?私はcertmgr.mscを起動しましたが、私はそれを見つけることができないようです –

関連する問題