1

サードパーティのwsdlを使用してサービスに接続しています。セキュリティ証明書とユーザー名/パスワードが提供されました。

私は持っています:

  • Windows7マシンに証明書をインストールしました
  • 正しい権限があることを確認しました
  • web.configに保存されているAPIの正しい場所を用意します

コードは毎回失敗します。エラーメッセージは変わりますが、次のようなものがあります。

  • リモートパーティがトランスポートストリームを閉じたため、認証に失敗しました。
  • 既存の接続がリモートホストによって強制的に閉じられました
  • SSL/TLSのセキュリティで保護されたチャネルを作成できませんでした

これは私が実行しているコードです:

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;

//Third party client
var client = new ConnectionPortClient();

//Including these two lines or not does not affect the outcome
//client.ClientCredentials.UserName.UserName = "username";
//client.ClientCredentials.UserName.Password = "password";

client.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(@"C:\..\cert.p12", "password", X509KeyStorageFlags.MachineKeySet);

var results = client.getResults("");

そして、これがweb.configの関連部分です。

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="assessmentBinding" closeTimeout="00:01:00" openTimeout="00:01:00"
            receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
            bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
            maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
            messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
            useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="Transport">
            <transport clientCredentialType="None" proxyCredentialType="None"
                realm="" />
            <message clientCredentialType="Certificate" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="https://endpoint/" binding="basicHttpBinding"
          bindingConfiguration="assessmentBinding" contract="API.Assessment"
          name="assessmentSOAP" />
    </client>
  </system.serviceModel>

ここで何が起こっているのかについて何か考えはありますか?

4

1 に答える 1

2

Certificate メッセージ資格情報タイプを使用していますが、 UserName メッセージ資格情報タイプに UserName/Password を設定しようとしています- これは間違っています。証明書クライアントによるメッセージ セキュリティに関する記事を確認してください。

于 2012-08-13T23:25:21.263 に答える