web-dev-qa-db-ja.com

WCFテストクライアントに自己署名証明書を強制することは可能ですか?

自己署名証明書を使用してIIS 7で実行されているWCFWebサービスがあります(これが目的のルートであることを確認するための概念実証です)。SSLを使用する必要があります。

自己署名証明書を必要とせずに、WCFテストクライアントを使用してこのサービスをデバッグすることは可能ですか?

私が試してみると、このエラーが発生します:

エラー:https:///Service1.svcからメタデータを取得できませんこれがアクセス権のあるWindows(R)Communication Foundationサービスである場合、指定されたアドレスでメタデータの公開が有効になっていることを確認してください。メタデータ発行を有効にするためのヘルプについては、次のMSDNドキュメントを参照してください http://go.Microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange Error URI:https:/// Service1 .svcメタデータには、解決できない参照「https:///Service1.svc」が含まれています。権限 ''を持つSSL/TLSセキュアチャネルの信頼関係を確立できませんでした。基になる接続が閉じられました:SSL/TLSセキュアチャネルの信頼関係を確立できませんでした。検証手順によると、リモート証明書は無効です。HTTPGETエラーURI:https:///Service1.svc 'https:///Service1.svc'のダウンロード中にエラーが発生しました。基になる接続が閉じられました:SSL/TLSセキュアチャネルの信頼関係を確立できませんでした。検証手順によると、リモート証明書は無効です。

編集:この質問は、WCFテストクライアントを使用して、自己署名証明書を使用してSSL経由で既に保護されているWebサービスをテストすることについて具体的に述べています。サーバーは、提供された証明書を受け入れるように既に設定されています。これは、これを行う方法がわからないWCFテストクライアントです。

28

開発エリアで非自己署名証明書を作成し、この証明書をIISで使用してSSLを適用できます。手順は次のとおりです。

  1. 自己署名証明書を作成する

    makecert -r -pe -n "CN = My Root Authority" -a sha1-sky署名
    -ss CA -sr CurrentUser 
    -cy Authority 
    -sv CA.pvk CA .cer
  2. このルート証明書によって署名されたSSLの非自己署名証明書を作成し、そこからpfxファイルを作成します

    makecert -pe -n "CN = servername" -a sha1 -sky exchange 
    -eku 1.3.6.1.5.5.7.3.1 -ic CA.cer -iv CA.pvk 
    -sp " Microsoft RSA SChannel暗号化プロバイダー "
     -sy 12 -sv server.pvk server.cer 
     
     pvk2pfx -pvk server.pvk -spc server.cer -pfx server.pfx

ここで、server.pfxをIISにインポートし、この証明書を使用するようにWebサイトのバインディングを設定し、CA.cerLocal Computer \にインストールする必要があります。 Trusted Root Certification AuthoritiesこのWCFクライアントを実行することにより、サーバーとクライアントの両方に保存すると、HTTPSを介してサービスで問題なく動作します。

12
Cyrus

wCFテストクライアントを WCFStorm Lite Edition に置き換えると、これを実行できるはずです。これは無料で、MSのテストクライアントよりもかなり柔軟性があります...たとえば、ユーザー名認証を行う場合は、ユーザー名とパスワードを指定できます。

4
Warren Rumak

この質問 からの回答は私の場合に役立ちました。証明書が期待するとおり、exactマシン名を必ず使用してください。たとえばmachine/service.svcは機能しない可能性がありますが、machine.domain/service.svc-動作します。

3
Petr Abdulin

あなたの質問に答えるために... WCFテストクライアントに自己署名証明書を受け入れるように強制する方法はここにあります...

        using (ServiceReference1.Service1Client proxy = new ServiceReference1.Service1Client())
        {
            System.Net.Security.RemoteCertificateValidationCallback callBack = (sender, certificate, chain, sslPolicyErrors) => true;
            ServicePointManager.ServerCertificateValidationCallback += callBack;

            Console.WriteLine(proxy.GetData(35));

            ServicePointManager.ServerCertificateValidationCallback -= callBack;
        }
2
user3118760

はい、可能です。

生成されたWSDLをサービスからダウンロードし( https://localhost/Service1.svc?singleWsdl )、WCFテストクライアントにサービスを追加するときにこのファイルへのパスを指定するだけです。

0
metalheart