5

を使用して、自己ホスト型の wcf サーバーを構築しましたwsHttpBinding。Win 2003 サーバー R2 SP2 を実行しています。

でリッスンするように構成するとhttp://localhost:443/MyService、すべて正常に動作します。Internet Explorer で接続できhttp://localhost:443/MyServiceますが、標準の「Bad Request」メッセージが表示されます

今、HTTPS に切り替えようとすると、奇妙な現象が発生します。

これが私がやったことです:

  1. wcf 設定ファイルを変更http://localhosthttps://localhostましSecurity=NoneSecurity=Transport(多数の wcf チュートリアルで説明されているように)。
  2. 次のように HTTP ポートを登録しました。

    httpcfg delete ssl -i 0.0.0.0:443
    
    httpcfg set ssl -i 0.0.0.0:443 -h ea2e450ef9d4...
    

私が使用した証明書は「本物の証明書」(つまり、信頼できる CA、つまり Comodo によって発行されたもの) であることに注意してください。サーバーは、証明書に記載されている NS で ping に応答します。

さて、以下はタイムアウトします:

Microsoft Telnet> open localhost 443

からの出力netstatは次のとおりです (Pid '4' は 'システム' プロセスです)。

netstat -nao

  Proto  Local Adress         Remote Adress          State           Pid
  TCP    0.0.0.0:443          0.0.0.0:0              Listening       4

そして、これは telnet で open コマンドを発行したときにキャプチャされたTCPViewのスクリーンショットです。

代替テキスト http://img26.imageshack.us/img26/3376/tcpview2si6.jpg

私は少し困惑しています。私にとって、netstatサーバーが 443 でリッスンしていると言う場合、443 への telnet 接続はタイムアウトしてはならず、暗号化されたものを入力することを期待して、少なくとも空白のプロンプトが表示されるはずです :)

これまでのところ、私はしようとしました:

  1. MSDN チュートリアルに正確に従って、すべての手順を最初からやり直します。
  2. 443 の代わりにポート 10443 を使用
  3. ファイアウォールを無効にする
  4. 自己署名証明書を使用する

次に何を試すべきかわからない..何かアイデアはありますか?

4

4 に答える 4

2

telnet クライアントは、https ハンドシェイクを開始するために適切に構成された要求を送信することを認識していないため、ssl で保護されたサーバーはさらにデータを待っているだけだと思います。

telnet クライアントは、ssl で保護されたサーバーからの応答をどう処理すればよいかわかりません (データを送信するように要求することはありません)。https ハンドシェイクが完了すると、通信が開始されます。

ハンドシェイクの方法を知っているクライアントを使用する必要があります。openssl バイナリは、これをすぐに実行できます。

于 2009-02-12T16:53:17.593 に答える
1

FerrariB が言ったように、telnet は SSL 接続を開くために必要なネゴシエーションを実行しません。Telnet は証明書や暗号化について何も知りません。したがって、telnet 経由で HTTPS ポート 443 と通信できないことが保証されます。何をしようとしても、別の方法を見つける必要があります。

たとえば、TLSに関するウィキペディアのページを確認してください。

上記の手順のいずれかが失敗した場合、TLS ハンドシェイクは失敗し、接続は作成されません。

これはまさに、telnet を使用して SSL エンドポイントと通信しようとしているときに表示されるものです。

于 2009-02-12T16:53:01.820 に答える
1

Telnet を使用して暗号化された Web と通信することはできません。

このmicrosfotノートをチェックしてください。「注: この例では、Web サーバーがデフォルトの HTTP ポート (TCP 80) を使用するように構成されていることを前提としています。Web サーバーが別のポートでリッスンしている場合は、例の最初の行でそのポート番号を置き換えてください。また、この例は、HTTPS/SSL 接続 (デフォルトでは TCP 443) では正しく機能しません。これは、telnet クライアントが、SSL セッションを確立するために必要な暗号化コマンドをネゴシエートできないためです. 最初の接続は HTTPS/SSL ポート経由で可能ですが、 GET リクエストを発行すると、データが返されます。」

更新: この他のメモを確認してください。方法: Web サーバーまたは中間デバイスで SSL 接続が機能していないかどうかを判断する

于 2009-02-12T16:37:05.540 に答える