3

サードパーティからの自己署名証明書(.cer)ファイルを持っています。その証明書をコードで使用して、Windowsの証明書ストアにインストールせずに(HTTPS経由で)Webサービスに接続したいと思います。具体的には、これにより、チームの他のすべての開発者は、接続が機能するためにこの証明書をローカルにインストールする必要がなくなります。

コードでこれを行う方法はありますか?昔ながらのwebservice-clientコード(wsdl.exeまたはVSのAdd Web Referenceを使用)またはWCFクライアントコード(svcutil.exeまたはVSのAdd Service Referenceを使用)のいずれかを使用できます-どちらの方向に進むかは明確ではありませんまだ。

私はもう試した:

proxy.ClientCertificates.Add(X509Certificate.CreateFromCertFile(@"d:\temp\mycert.cer"));

昔ながらのWebサービスコードでは、運がありませんCould not establish trust relationship for the SSL/TLS secure channel.。実際に証明書を証明書ストアにインストールするまで、失敗します。同じこと:

<identity>
  <certificate encodedValue="the base64 encoded contents of the file" />
</identity>

WCFクライアントテクノロジを使用してapp.configのエンドポイントで。

ありがとう

4

2 に答える 2

3

証明書が必要な理由はHTTPSです。Webサービスは、システムによって信頼されていない証明書を使用したトランスポートセキュリティ(HTTPS)によって保護されています。証明書を信頼するための一般的なアプローチは、証明書を証明書ストアにインストールすることです。これはすべて.NET機能ではありません-.NETの責任外のWindows機能です。

任意のSSL証明書を信頼するために、.NETは、証明書の検証に使用する独自のコードを作成できるコールバック方式を提供していますServicePointManager.ServerCertificateValidationCallback。コールバックからtrueを返すだけで、すべての証明書が信頼されますが、それは開発とテストのみを目的としています。本番アプリケーションにデプロイしたら、証明書ストアからの証明書を使用するか、コールバックで定義された特定の検証を使用する必要があります(非推奨)。

于 2011-06-07T05:46:10.213 に答える
1

.NETは、プレーンテキストファイルからの証明書とキーの組み合わせ(この場合は必要)を処理できない/処理しません。私はそれを構築する方法を見つけていません。フラットアウトでは、証明書のプレーンテキストキーは読み取られません。

ただし、コンテナーにパスワードがない場合でも、P12/PFXコンテナーで機能します。これをエンコードされた文字列として保存し、次のコンストラクターを介して再構成することもできます:http: //msdn.microsoft.com/en-us/library/ms148418.aspx

于 2011-06-06T23:55:25.097 に答える