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

Services Web Java Discussion :

Erreur 401 lors de l'appel à EWS avec axis en SSL


Sujet :

Services Web Java

  1. #1
    Membre averti Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Points : 442
    Points
    442
    Par défaut Erreur 401 lors de l'appel à EWS avec axis en SSL
    Bonjour,

    Je suis en train de développer un client java permettant d'invoquer un service web Exchange 2007 pour créer / interroger des rendez-vous dans le calendrier. Je suis contraint de travailler avec un JDK 1.4.02.

    Après quelques modifications du WSDL, j'ai finalement réussi à générer un client avec axis 1.4.
    Le problème survient lorsque j'essaye d'invoquer le service : le serveur me retourne une erreur HTTP 401 ("You are not authorized to view this page").
    Le endpoint du service n'est accessible qu'en SSL après authentification (user et password du compte exchange). J'ai donc essayé d'importer et d'utiliser un certificat pour passer en SSL, sans succès.

    Voici le code actuel avec lequel je fais mes tests :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    package test;
     
    import ...
     
    public class Test1 {
        public Test1() {
        }
     
        public static void main(String[] args) {
            System.out.println ("Hello world !");
     
            //
            System.out.println ("* Connexion SSL *");
            System.out.println ("Activation du debug");
            System.setProperty("javax.net.debug","all");
     
            System.setProperty("UseSunHttpHandler", "true");
     
            System.setProperty("java.protocol.handler.pkgs","javax.net.ssl");
     
            System.out.println ("Definition du keystore");
            /*
            //String keystore = "jssecacerts";
            String keystore = "/home/xav/.keystore";
            System.setProperty("javax.net.ssl.keyStore", keystore);
            System.setProperty("javax.net.ssl.keyStorePassword", "changeit");
            System.setProperty("javax.net.ssl.trustStore", keystore);
            System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
            */
            AxisProperties.setProperty("axis.socketSecureFactory","org.apache.axis.components.net.SunFakeTrustSocketFactory");
     
            System.out.println ("Initialisation SSL");
            com.sun.net.ssl.internal.ssl.Provider.install();
            java.security.Security.insertProviderAt(new com.sun.net.ssl.internal.ssl.Provider(), 1);
            //
     
            URL wsdlURL = null;
            ExchangeServiceBindingStub esb = null;
     
            try {
                System.out.println ("Construction URL");
                //wsdlURL = new URL ("https://MON_SERVEUR_EXCHANGE/EWS/Exchange.asmx");
                wsdlURL = new URL(null, "https://MON_SERVEUR_EXCHANGE/EWS/Exchange.asmx", new com.sun.net.ssl.internal.www.protocol.https.Handler());
     
                System.out.println ("Instantiation du service");
                esb = (ExchangeServiceBindingStub) new ExchangeWebServiceLocator().getExchangeWebPort(wsdlURL);
     
                esb.setUsername("mon_user_exchange");
                esb.setPassword("mon_password");
     
            } catch (MalformedURLException e) {
                // TODO
                e.printStackTrace();
            } catch (ServiceException e) {
                // TODO
                e.printStackTrace();
            }
     
            System.out.println ("Desactivation du debug");
            System.setProperty("javax.net.debug","warn");
     
     
            System.out.println ("Construction de la requete");
            FindItemType requestFindItem = new FindItemType();
            CreateItemType requestCreateItem = new CreateItemType();
     
            // Specify the location of calendar
            DistinguishedFolderIdType agenda = new DistinguishedFolderIdType();
            agenda.setId(DistinguishedFolderIdNameType.calendar);
            requestCreateItem.setSavedItemFolderId(new TargetFolderIdType());
            requestCreateItem.getSavedItemFolderId().setDistinguishedFolderId(agenda);
     
            // Create the array of items.
            requestCreateItem.setItems(new NonEmptyArrayOfAllItemsType());
     
            // Creation du rendez-vous
            CalendarItemType rendezVous = new CalendarItemType();
            rendezVous.setSubject("Test EWS");
            rendezVous.setBody(new BodyType());
            rendezVous.getBody().setBodyType(BodyTypeType.Text);
            rendezVous.getBody().set_value("Corps du texte du rendez-vous");
            rendezVous.setReminderIsSet(new Boolean(false));
            rendezVous.setIsAllDayEvent(new Boolean(false));
            rendezVous.setLegacyFreeBusyStatus(LegacyFreeBusyType.Busy);
     
            // Date de debut
            SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm");
            Date dateDebut = null;
            Calendar dateDebutCal;
            try
            {
              dateDebut = (Date)formatter.parse("30/06/2011 14:00");
            }
            catch (ParseException e)
            {
              e.printStackTrace();
              // TODO
            }
            dateDebutCal = Calendar.getInstance();
            dateDebutCal.setTime(dateDebut);
            rendezVous.setStart(dateDebutCal);
     
            // Date de fin
            Calendar dateFinCal;
            dateFinCal = (Calendar)dateDebutCal.clone();
            dateFinCal.add(Calendar.HOUR_OF_DAY, + 1);
            rendezVous.setEnd(dateFinCal);
     
            // Ajout du rendez-vous a la liste de ceux a creer
            requestCreateItem.getItems().setCalendarItem(rendezVous);
     
            ConnectingSIDType sidt = new ConnectingSIDType();
            SerializedSecurityContextType ssct = new SerializedSecurityContextType();
            RequestServerVersion requestVersion = new RequestServerVersion();
            CreateItemResponseTypeHolder createItemResult = new CreateItemResponseTypeHolder();
            ServerVersionInfoHolder serverVersion = new ServerVersionInfoHolder();
     
            TimeZoneContextType timeZoneContext;
            timeZoneContext = new TimeZoneContextType();
            timeZoneContext.setTimeZoneDefinition(new TimeZoneDefinitionType());
            timeZoneContext.getTimeZoneDefinition().setId("W. Europe Standard Time");
     
            try
            {
                // Send a CreateItem request and get the CreateItem response.
                esb.createItem(
                  requestCreateItem,
                  requestVersion, 
                  timeZoneContext,
                  createItemResult, 
                  serverVersion);
     
                CreateItemResponseType createItemResponse = new CreateItemResponseType();
                ArrayOfResponseMessagesType responses = createItemResponse.getResponseMessages();
                ResponseMessageType responseMessages = responses.getSendItemResponseMessage();
                System.out.println("rM :: " + responseMessages.getMessageText());
                System.out.println (responseMessages.getMessageText());
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
     
            System.out.println ("Bye !");
        }
    }
    Quelqu'un aurait une piste sur ce qui ne va pas dans mon code, ou la méthode à suivre ?

  2. #2
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    Bonjour

    As-tu des certificats (keystore et trustsore) ou alors l'envoi de login et pwd suffit ?

    Si tu a un keyStore en JKS, essai de le convertir en pk12 et voie si tu accède a la page avec ton bowser.

    J'ai moi même réalisé un client ws avec java 1.4 et même si l'erreur n'était pas identique, il faut que tu sache que la longueur des clés supporté par 1.4 est je crois de 1024, ce qui n'est plus d'actualité. J'ai du passer par un proxy intermédiaire pour remplacer les entêtes et mettre les bonne clés.

  3. #3
    Membre averti Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Points : 442
    Points
    442
    Par défaut
    Bonjour,

    J'ai essayé d'importer le certificat directement dans le magasin jssecacerts sans succès. J'ai aussi essayé de l'importer en l'approuvant dans le magasin de Linux, pas mieux.

    Lorsque j'essaye avec Firefox, il me demande un user/pwd, par contre avec IE ou Chrome, pas de user. Tout ceci quand je teste depuis un PC du bureau, qui est donc sur un domaine réseau connu; je n'ai pas testé depuis l'extérieur.

  4. #4
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    Mes connaissances sur les certif sont théorique. C'est notre chef du réseau et sécu. qui s'en est chargé.

    Mais fait ses quelque vérifications :

    - a tu l’autorité de certification du serveur qui a bien été ajoutée au truststore ?
    - ton jks fait à la fois office de truststore et de keystore ?
    - attention au jdk1.4, si en face tu n'utilise pas la même chose, cela ne marchera jamais. Soit très prudent.

Discussions similaires

  1. Erreur 401 lors d'un appel Java à la Project Server Interface
    Par Ruyuki dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 24/07/2012, 16h02
  2. [wss3] Erreur 401 lors de l'appel du web service en c#
    Par nosdo dans le forum Développement Sharepoint
    Réponses: 10
    Dernier message: 06/07/2010, 15h09
  3. Erreur 404 lors de l'appel d'un web service
    Par niouma dans le forum Services Web
    Réponses: 1
    Dernier message: 03/05/2009, 01h36
  4. erreur 401 lors de l'invocation du ws
    Par AMINIS dans le forum Services Web
    Réponses: 0
    Dernier message: 16/03/2009, 11h00
  5. [SQL-Server] Erreur 500 lors d'un script php avec sql
    Par DeusDavid dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/12/2006, 18h47

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