IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] XmlHTTPRequest, CORS et Certificat SSL


Sujet :

AJAX

  1. #1
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : janvier 2004
    Messages : 754
    Points : 1 287
    Points
    1 287
    Par défaut [AJAX] XmlHTTPRequest, CORS et Certificat SSL
    Bonjour à tous,

    Je dois développer des WebServices, les sécuriser dans un tunnel HTTPS, et y accéder depuis du JS (AngularJS) hébergé sur un autre domaine... Oui, je sais...

    Quand je tappe le WSDL de mon WebService depuis un navigateur, il me demande quel certificat je veux envoyer (j'ai créé ce dernier avec OpenSSL et je l'ai chargé dans mon navigateur). Puis le serveur m'envoie à son tour son certificat, que j'accepte. A partir de là, on peut communiquer. Jusque là, tout va bien et tout me semble normal.

    Maintenant, quand je veux faire l'appel à ce même WSDL depuis un JS (que j'appelle depuis un index.html en local sur file://) je récupère évidemment un objet XmlHTTPRequest, positionne withCredentials=true, j'ai positonné le Access-Control-Allow-Origin: * sur mon serveur ainsi que Access-Control-Allow-Credentials: true.

    Problème : mon JS n'envoie pas le certificat client, donc le serveur... ne lui répond pas.

    Existe-t-il une solution pour envoyer un certificat avec JS et accepter celui du serveur ?

    Ou la seule solution pour moi est de mettre en place un proxy frontal qui s'occupe de :
    1. établir le lien HTTPS/SSL avec le client
    2. dispatcher vers les 2 domaines les requêtes clientes
      1. Pour être sécurisé de point à point, je dois pouvoir mettre en place un tunnel SSL entre mon frontal et mes 2 serveurs non ?


    Par avance, merci pour vos pistes, réponses, solutions, etc...
    Olivier.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  2. #2
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    juillet 2004
    Messages
    4 185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 4 185
    Points : 9 093
    Points
    9 093

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2008
    Messages : 23 647
    Points : 91 423
    Points
    91 423
    Billets dans le blog
    20
    Par défaut
    L'utilisation d'AJAX en file:// est une source infinie de problèmes... Ca me semble du reste assez hérétique conceptuellement. Tu devrais essayer depuis un serveur local, ce serait plus judicieux.
    Et si l'utilisation d'un serveur local n'est pas envisageable, alors il faudra se poser la question de savoir si les technologies que tu utilises sont vraiment adaptées à ton besoin.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : janvier 2004
    Messages : 754
    Points : 1 287
    Points
    1 287
    Par défaut
    Salut sekaijin.

    Je suis d'accord sur le principe du same origin. Qu'on peut outrepasser justement grâce à CORS.

    Ma problématique est bien dans le cadre de CORS, s'il est possible d'établir une nouvelle connexion en HTTPS, et donc d'échanger des certificats, avec XmlHTTPRequest. (ou XDomainRequest).

    A+
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  5. #5
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : janvier 2004
    Messages : 754
    Points : 1 287
    Points
    1 287
    Par défaut
    Citation Envoyé par Bovino Voir le message
    L'utilisation d'AJAX en file:// est une source infinie de problèmes... Ca me semble du reste assez hérétique conceptuellement. Tu devrais essayer depuis un serveur local, ce serait plus judicieux.
    Et si l'utilisation d'un serveur local n'est pas envisageable, alors il faudra se poser la question de savoir si les technologies que tu utilises sont vraiment adaptées à ton besoin.
    Salut.

    L'utilisation d'un serveur local n'est pas une option mais une certitude

    Je passais en file:// pour aller plus vite (et un petit peu aussi parce que je n'ai pas les droits d'admin sur cette f*** machine pour m'y installer un Apache...) et parce que je ne connaissais pas de problèmes particuliers liés à ce protocole.

    Je viens de récupérer une autre machine (sous Windows, c'est pratique tiens pour installer des serveurs...). J'y installe Apache et je teste. J'ai quand même peur de tomber sur le même problème, si mon JS n'est pas dans le même domaine, pour faire une appel HTTPS il faut obligatoirement que je fasse un échange de certificats. Si XmlHTTPRequest ne le permet pas...
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    12 319
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 12 319
    Points : 20 852
    Points
    20 852
    Par défaut
    Citation Envoyé par leminipouce Voir le message
    J'ai quand même peur de tomber sur le même problème, si mon JS n'est pas dans le même domaine, pour faire une appel HTTPS il faut obligatoirement que je fasse un échange de certificats. Si XmlHTTPRequest ne le permet pas...
    Le problème n'est pas le même : la same-origin-policy n'aurait pas autorisé un fichier du disque dur à communiquer avec un site web. Les règles CORS n'outrepassent rien du tout et notamment pas ça. (Elles permettent à deux sites de communiquer s'ils sont d'accords. C'est différent.)

    ... Mais oui, le problème du certificat côté client, reste.
    Je ne suis pas sûr de comment ça pourrait marcher, parce qu'il s'agit là d'authentifier le fait que c'est bien ton navigateur, qui appelle le site A à la demande du site B.
    Et à ma connaissance, le protocole SSL ne permet pas de moyen de représenter l'autorité "client X, à la demande de domaine Y"
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : janvier 2004
    Messages : 754
    Points : 1 287
    Points
    1 287
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Le problème n'est pas le même : la same-origin-policy n'aurait pas autorisé un fichier du disque dur à communiquer avec un site web. Les règles CORS n'outrepassent rien du tout et notamment pas ça. (Elles permettent à deux sites de communiquer s'ils sont d'accords. C'est différent.)
    Tu as complètement raison. J'ai pris un raccourcis erroné en parlant du même problème

    Quoi qu'il en soit, je n'ai effectivement pas réussi à demander à mon JS d'ouvrir un nouveau canal SSL, alors que la problématique Cross-Domain était résolue.

    J'ai donc mis en oeuvre l'autre solution que je présentais :
    1. Un frontal Apache avec lequel mon client communique en HTTPS
    2. 2 serveurs derrière le frontal avec lesquels il communique en HTTP
    3. Quand le client lance le JS, il a déjà ouvert son tunnel SSL avec le frontal Apache.
      1. Mais dans tous les cas, il n'y a plus de XDomain avec JS, vu qu'il appelle lui aussi le frontal. C'est mod_proxy qui s'occupe de faire la redirection vers la bon serveur en interne...


    La solution marche et je dois avouer, me plait.

    Merci encore pour vos aides.
    A+
    Olivier.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Certificat SSL et XMLHttpRequest
    Par zecreator dans le forum IIS
    Réponses: 3
    Dernier message: 23/04/2007, 15h50
  2. IIS et certificat SSL
    Par rastali dans le forum IIS
    Réponses: 1
    Dernier message: 06/01/2006, 16h11
  3. Réponses: 2
    Dernier message: 15/11/2005, 13h27
  4. prix d'un certificat ssl cher ?
    Par roninou dans le forum Sécurité
    Réponses: 1
    Dernier message: 16/09/2005, 15h08
  5. Certificat SSL ...
    Par rgarnier dans le forum XMLRAD
    Réponses: 12
    Dernier message: 22/03/2005, 10h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo