Mettre en œuvre un Client C# qui utilise les Services web via le protocole SSL?
Donc j'ai un ServiceReference ajouté à une Application Console C# qui appelle un Service Web qui est exposé à partir d'Oracle.
J'ai tout de configuration et il fonctionne comme les pêches, quand il ne l'utilise pas SSL (http). Je suis en train de le configurer à l'aide de SSL, et je suis en cours d'exécution dans des problèmes avec l'ajout du Service de Références (ou même des Références Web). Par exemple, l'URL (https) que le service est en cours d'exposé, n'est pas de retourner le web approprié des méthodes lorsque j'essaie de l'ajouter dans Visual Studio.
La connexion sous-jacente a été fermée: Une erreur inattendue s'est produite lors de l'envoi.
Reçu un inattendu expressions du FOLKLORE ou de 0 octets dans le flux de transport.
Les métadonnées contiennent une référence qui ne peut pas être résolu:"https://srs204.mywebsite.ca:7776/SomeDirectory/MyWebService?WSDL'
Un autre dilemme que j'ai est en ce qui concerne le certificat de gestion et de déploiement. J'ai environ 1000 clients externes les sites qui auront besoin d'utiliser ce petit utilitaire et ils devront le certificat est installé dans la cert magasin afin de vous connecter au Service Web. Vous ne savez pas la meilleure approche pour gérer cela. Ont-ils besoin d'être dans le magasin racine?
J'ai passé quelques heures sur le web à la recherche sur les différentes options, mais ne peut pas obtenir un bon nettoyage de répondre à n'importe où.
Pour résumer, j'ai un couple de questions ici:
1) Quelqu'un a quelques bons liens sur la configuration des Services Web dans Visual Studio qui utilise le protocole SSL?
2) Comment dois-je inscrire le certificat? Le magasin devrait-il exister? Puis-je utiliser quelque chose comme CertMgr l'enregistrer?
Il doit être un bon livre/tutoriel/whatever qui va me montrer commun de bonnes pratiques sur la définition de quelque chose comme cela. Je n'arrive pas à les trouver!
Ils sont dans le même immeuble, à ce point, donc si c'est quelque chose liée au serveur, je peux l'obtenir modifié. Je peux afficher le https URL dans un navigateur, et il me montre le standard d'Oracle Service Web page de test. Afin que je puisse le frapper. Il ne me demander d'accepter un certificat lorsque je tape l'URL. J'ai été à deux .cer fichiers (un pour le serveur de développement, un pour le serveur de production) qui devront être enregistrés.
Si vous ouvrez l'url (https) dans un navigateur, vous voyez ce que vous attendez? En existe d'autres à l'aide de ce service sur https sans problème? Je ne suis pas sûr de savoir comment web d'oracle servics de travail, mais si c'est hébergé sur ou par le biais de IIS, vous devez ajouter le nom de domaine (webservice.servicehost.com) comme un SSL en-tête d'hôte.
Je suis le seul gars qui essaye de faire usage de ce droit maintenant. Quand je l'ouvre, je reçois une page qui est le point de terminaison du service. Il a quelques options sur ce que je peux utiliser pour tester contre elle, exécuter un test de stress, vue sur le WSDL etc. Donc, je suis sûr que c'est en place et en cours d'exécution ok ou au moins en apparence, il semble de cette façon. J'ai eu la même page sur le (http) version sans SSL, et que la version fonctionnait très bien.
Eh bien, je vais continuer mes recherches sur ce point. Ce lien a aidé à ce jour... weblogs.asp.net/jan/archive/2003/12/04/41154.aspx
OriginalL'auteur Mat Nadrofsky | 2009-05-12
Vous devez vous connecter pour publier un commentaire.
Bien, j'ai compris cela. Il m'a fallu beaucoup plus de temps que je me soucie de vous parler, mais je voulais partager ma solution, car c'est une ÉNORME bête noire de la mine pour voir la norme. "Oh, j'ai corrigé! Merci!" les messages qui laissent tout le monde accroché sur ce qui s'est réellement passé.
.
La racine du problème est que par défaut, Visual Studio 2008 utilise le protocole TLS pour le handshake SSL et l'Oracle/Java Webservice que j'essayait de se connecter a l'aide du protocole SSL3.
Lorsque vous utilisez la fonction "Ajouter une Référence de Service..." dans Visual Studio 2008, vous avez rien n'indique que le protocole de sécurité pour le point de service du gestionnaire doit être SSL3.
Moins.
Vous prenez une statique document WSDL et utilisation wsdl.exe pour générer une classe proxy.
Ensuite, vous pouvez utiliser le C Sharp Compilateur de transformer la classe de proxy dans une bibliothèque (.dll) et l'ajouter à votre .Net des projets de "Références".
À ce stade, vous devez également vous assurer que vous avez inclus un Système.Web.Services dans vos "Références".
Maintenant, vous devriez être en mesure d'appeler votre service web sans un problème dans le code. Pour le rendre travail vous allez avoir besoin d'une magie ligne de code ajoutée avant de vous instanciez le service.
Ok, donc je me sentais assez impressionné par moi-même que le test a été très bien sur mon boîte de dev. Ensuite, j'ai déployé à un autre client de la boîte et il ne serait pas vous connecter à nouveau en raison d'une des autorisations/autorité de la question. Cela sentait les certificats pour moi (quels qu'ils l'odeur). Pour résoudre ce problème, je utilisé certmgr.exe pour enregistrer le certificat pour le site à la Racine de Confiance sur la Machine Locale.
Cela me permet de distribuer le certificat de nos sites client et l'installer automatiquement pour les utilisateurs. Je ne suis toujours pas sûr de la manière "de sécurité de l'amicale" les différentes versions de windows sera en ce qui concerne automatique des certificats d'inscriptions de ce genre, mais il a très bien fonctionné jusqu'à présent.
Espère que cette réponse vous aide certaines personnes. Grâce à blowdart trop pour votre aide sur ce point et de fournir un aperçu.
Je viens de la navigation. N'a pas vraiment une question, mais il a été très heureux de voir votre résolution. Ça sonnait comme il a fallu beaucoup de recherches. Grande explication! Merci!
Très heureux d'entendre, j'ai aidé quelqu'un et nous espérons sauvé un peu de douleur! 🙂
OriginalL'auteur Mat Nadrofsky
Il semble que le service web est d'utiliser un certificat auto-signé. Franchement ce n'est pas la meilleure approche.
En supposant que vous êtes une grande entreprise et il est interne, vous pouvez configurer votre propre autorité de certification de confiance, c'est particulièrement facile avec Active Directory. À partir de ce CA, le serveur hébergeant le service Oracle pourrait demander un certificat et vous pouvez utiliser AD politique de faire confiance à votre autorité de certification interne du certificat racine de la placer dans la racine de confiance de la banque d'ordinateur. Cela permettrait d'éliminer la nécessité d'manuellement de la fiducie ou d'accepter le certificat sur le service web.
Si les ordinateurs clients externes, alors vous allez avoir à obtenir les gens à exposer le service soit pour acheter un "vrai" certificat de l'un des bien connu des CAs comme Verisign, Thawte, GeoTrust, etc. ou dans le cadre de votre installation bundle le certificat public et de l'installer dans Confiance des autorités de certification Racine au niveau de la machine sur chaque machine. Cela a des problèmes, par exemple, aucun moyen de révoquer le certificat, mais va supprimer l'invite.
Donc vous n'aurez pas besoin de s'inquiéter sur le serveur live puis, il va travailler à l'extérieur de la boîte comme GTE est une racine de confiance (je pense que vous êtes un peu confus, il est peu probable que le serveur live a sa propre racine cert, c'est probablement juste une normale cert). Afin de vérifier que j'avais ajouter une référence au service live et voir ce qui se passe. Si c'est tout bon alors pour les dev, vous devez installer le cert sur votre machine. Démarrer la console MMC et ajouter le cerificates snapin, en lui disant d'utiliser la machine locale. Puis importer le dev cert en racine de confiance.
Gotcha. J'ai exécuter la console MMC, utilisé le composant logiciel enfichable certificats pour assurer le développement cert autorité a été ajouté à la "racine de confiance" pour l'ordinateur local. Ne pouvez toujours pas vous connecter à la version de développement du service. Je ne peux pas vraiment tester par rapport à la version de production comme nous n'avons pas de développement encore. Je pourrais être en mesure de les obtenir pour tenter de définir quelque chose pour moi. Est-il une chance de quelque chose peut-être tort sur leur fin avec le certificat de développement? Si j'ai le droit cert installé sur mon système, je devrais être en mesure d'ajouter le service HTTPS référence sans une erreur de droit?
Et je me dois de préciser par erreur sur "fin", je veux dire que le cert j'ai pour le serveur de développement n'est pas l'un qui est en fait utilisé sur ce serveur.
Grand moment merci pour l'aide et les suggestions.
OriginalL'auteur blowdart
Merci pour ce bon conseil, a pris un coup d'oeil rapide autour de vous à vos affaires et vous avez beaucoup de bonnes idées en cours. Voici mon peu à ajouter, je suis en trouver webMethods et (surprise!) il a les mêmes problèmes que le Oracle application server vous vous êtes connecté (SSL3 au lieu de TLS). Votre approche a très bien fonctionné, voici mon addendum.
Donnée statique de la classe d'Usine"," prévoir ces deux handy dandy éléments:
Puis de consommer ce genre de choses (comme vous l'avez sans doute déjà deviné, mais mettre un roulement de tambour dans ici de toute façon):
Que fait le truc -- quand je reçois un peu plus de temps je vais résoudre le problème thread (ou pas).
OriginalL'auteur Andrew Bruce
Car je n'ai pas la réputation de faire des commentaires, je tiens à mentionner que, Mat Nadrofsky la réponse de l'exemple de code pour forcer SSL3 est aussi la solution pour une erreur semblable à
Suffit d'utiliser
comme mentionné par Mat. Testé avec SAP NetWeaver PI serveur en HTTPS. Merci!
OriginalL'auteur Ricardo Pardini
Mat,
J'ai eu des problèmes et j'ai une façon d'éviter d'utiliser des certmgr.exe pour ajouter des certificats racine de confiance sur une machine distante.
Le "certificat d'objet" peut être créé comme ceci:
OriginalL'auteur