2009-02-12 15 views
4

J'ai construit un serveur wcf auto-hébergé, en utilisant wsHttpBinding. Je cours le serveur Win 2003 R2 SP2.netstat dit 443 est ouvert, mais je ne peux pas me connecter avec telnet .. pourquoi?

Si je le configure pour écouter sur http://localhost:443/MyService, tout fonctionne correctement. Je peux me connecter à http://localhost:443/MyService avec Internet Explorer, et je reçois le message standard "Bad Request"

Maintenant, si j'essaie de passer en HTTPS, je suis témoin d'un phénomène étrange.

Voici ce que je l'ai fait:

  1. J'ai changé mon fichier de configuration WCF de http://localhost à https://localhost et de Security=None à Security=Transport (comme expliqué dans de nombreux tutoriels WCF)
  2. Je me suis inscrit mon port HTTP comme ceci:

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

Notez que le certificat que j'ai utilisé est un "vrai certificat" (c.-à-d. émis par un CA de confiance, à savoir Comodo). Le serveur répond à ping sur le NS mentionné dans le certificat.

Maintenant, voilà ce délai expire:

Microsoft Telnet> open localhost 443 

est ici la sortie de netstat (pid '4' est processus, le 'système'):

netstat -nao 

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

Et voici une capture d'écran de TCPView capturé lorsque j'ai émis la commande d'ouverture dans telnet:

alt text http://img26.imageshack.us/img26/3376/tcpview2si6.jpg

Je suis un peu perplexe. Pour moi, si netstat dit que le serveur écoute sur 443, la connexion telnet à 443 ne devrait pas expirer, et je devrais avoir au moins une invite vide, s'attendant à ce que je tape des trucs cryptés :)

Jusqu'ici ai essayé de:

  1. Recréer toutes les étapes à partir de zéro en suivant exactement le tutoriel MSDN
  2. port utilisé 10443 au lieu de 443
  3. Désactiver le pare-feu
  4. Utilisez un certificat auto-signé

Je ne sais pas quoi essayer ensuite ... des idées?

Répondre

2

Le client telnet ne saura pas envoyer une requête correctement construite pour initier une prise de contact https, donc j'imagine que le serveur sécurisé ssl attend simplement plus de données.

Le client telnet ne saura certainement pas quoi faire de la réponse d'un serveur SSL sécurisé (il ne va certainement pas vous inviter à envoyer des données). La communication ne peut avoir lieu qu'une fois la prise de contact https terminée.

Vous devez utiliser un client qui sait comment effectuer une prise de contact. The openssl binary can do this out of the box.

1

Telnet ne peut pas être utilisé pour communiquer avec des sites Web incrustés.

Payer la note microsfot. Cela dit "REMARQUE: Cet exemple suppose que le serveur Web est configuré pour utiliser le port HTTP par défaut (TCP 80) .Si le serveur Web écoute sur un port différent, remplacez ce numéro de port par la première ligne de l'exemple. , cet exemple ne fonctionne pas correctement sur une connexion HTTPS/SSL (TCP 443, par défaut), car le client telnet ne peut pas négocier les commandes de chiffrement nécessaires pour établir la session SSL.Bien qu'une connexion initiale est possible sur le port HTTPS/SSL, aucune donnée est retournée lorsque vous exécutez une requête GET «

Mise à jour:. Commander cette autre note HOW TO: Determine If SSL Connectivity Is Not Working on the Web Server or on an Intermediate Device

+0

Oui, c'est ce que je l'ai dit, je devrais au moins avoir une « connexion initiale » au lieu d'un délai d'attente .. Btw, IE ne fonctionne pas aussi ... – Brann

+0

Je viens d'essayer sur un serveur de travail https. Tu as raison, ça ne marche pas. – Brann

+0

btw, le lien que vous venez de poster n'aide pas: je n'utilise pas IIS (mon service est auto-hébergé), et ce howto semble se concentrer sur les problèmes de connectivité (je n'en ai pas, puisque je suis directement sur le serveur) – Brann

1

Comme dit FerrariB, telnet ne effectuer les négociations nécessaires pour ouvrir une connexion SSL Telnet ne connaît rien aux certificats, ni au cryptage.Vous êtes donc assuré de ne pas pouvoir communiquer avec le port HTTPS 443 via telnet.Vous devrez trouver une autre façon de faire ce que vous essayez

Consultez la page de Wikipedia sur TLS par exemple, où il est dit directement:

Si l'une des étapes ci-dessus échoue, la poignée de main TLS échoue, et la connexion n'est pas créé.

C'est précisément ce que vous voyez en essayant d'utiliser telnet pour communiquer avec un point de terminaison SSL.

0
  1. dans l'invite de commande: netstat -nao |find "443" les dernières colonnes montrent un nombre: pic no.1

  2. Maintenant, la tâche ouverte numéro de résultat manager.find en 1ère section dans la colonne pid (si pid n'a pas été activé, choisissez-le dans l'onglet Vue) nom du programme montre le programme qui utilise le port.

  3. désactiver le programme qui utilise le port/dans mon cas je me suis arrêté à partir des services