Numéro d'article: 182888 - Dernière mise à jour: jeudi 1 juillet 2004 - Version: 2.1

Comment faire pour la gestion de l'erreur d'autorité de certificat non valide avec WinInet

A noterCet article s'applique à un système d'exploitation différent de celui que vous utilisez. Le contenu de l'article qui ne vous concerne peut-être pas est désactivé.
Agrandir tout | Réduire tout

Résumé

Si un certificat SSL de serveur est délivré par inconnu ou non valide autorité de certification API HttpSendRequest de WinInet ou CInternetFile::SendRequest MFC échouera avec l'erreur 12045 (ERROR_INTERNET_INVALID_CA).

Lorsqu'Internet Explorer tente d'accéder à la même URL, erreur similaire est signalée.

Plus d'informations

Cette erreur se produit lorsque le client ne connaît pas l'autorité de certification qui a délivré le certificat de serveur. Le problème peut être corrigé en installant certification de racine le certificat de l'autorité de. Il est possible d'afficher une liste de tous les certificats installés à partir d'Internet Explorer. Dans le menu Affichage, cliquez sur Internet Options, cliquez sur l'onglet contenu et cliquez sur références.

Il est possible de contourner cette erreur dans l'application WinInet sans installer un certificat. Il existe deux méthodes de gestion de cette erreur. Vous pouvez utiliser du code semblable à celui-ci.

Méthode 1. Avec une interface utilisateur (une boîte de message comme Internet Explorer est générée):
   ...
   Again:
   if (!HttpSendRequest (hReq,...))
       dwError = GetLastError ();

   if (dwError == ERROR_INTERNET_INVALID_CA)
   {
       // Make sure to check return code from InternetErrorDlg
       // user may click either OK or Cancel. In case of Cancel
       // request should not be resumbitted.
       InternetErrorDlg (GetDesktopWindow(),
                         hReq,
                         ERROR_INTERNET_INVALID_CA,
                         FLAGS_ERROR_UI_FILTER_FOR_ERRORS |
                         FLAGS_ERROR_UI_FLAGS_GENERATE_DATA |
                         FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS,
                         NULL);
      goto again;
   }
   ...
				
méthode 2. Sans interface utilisateur :
   ...
   Again:
   if (!HttpSendRequest (hReq,...))
      dwError = GetLastError ();
   if (dwError == ERROR_INTERNET_INVALID_CA)
   {
      DWORD dwFlags;
      DWORD dwBuffLen = sizeof(dwFlags);

      InternetQueryOption (hReq, INTERNET_OPTION_SECURITY_FLAGS,
            (LPVOID)&dwFlags, &dwBuffLen);

      dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
      InternetSetOption (hReq, INTERNET_OPTION_SECURITY_FLAGS,
                            &dwFlags, sizeof (dwFlags) );
      goto again;
   }
   ...
				
similaire logique peut être utilisée avec les classes MFC WinInet. Dans ce cas, les méthodes MFC suivantes correspondent aux WinInet API utilisé ci-dessus :

  • CInternetFile::SendRequest
  • CInternetFile::QueryOption
  • CInternetFile::SetOption
  • CInternetFile::ErrorDlg
Notez que Visual C++ 5.0 ne dispose pas de documentation sur CInternetFile::ErrorDlg CInternetFile::QueryOption et CInternetFile::SetOption. Afficher la source MFC Inet.cpp de fichiers pour les informations comment utiliser cette méthode.

Remarque 1: InternetErrorDlg peut renvoyer des valeurs suivantes :
   ERROR_SUCCESS
   ERROR_CANCELLED
   ERROR_INTERNET_FORCE_RETRY.
				
la demande doit être soumise à nouveau uniquement lorsque ERROR_INTERNET_FORCE_RETRY est retourné. Dans Internet Explorer 4.0 et 4.01, toutefois, la demande doit être soumise à nouveau même lorsque ERROR_SUCCESS est renvoyé.

Microsoft a confirmé l'existence de ce problème dans l'InternetErrorDlg API. Remarque 2: SECURITY_FLAG_IGNORE_UNKNOWN_CA n'est pas implémenté dans Internet Explorer 3.0 ou 3.02.

InternetErrorDlg fonctionne toujours, cependant, avec l'exception suivante. La boîte de dialogue générée par cette API ne permet pas Ignorer erreur d'autorité de certificat non valide ; il s'agit simplement d'une notification à l'utilisateur cette page ne peut pas être affichée.

Remarque 3: l'option pour ignorer cette erreur ne peut pas être définie avant l'erreur générée. Vous devez tout d'abord tentative d'envoyer la demande, le message d'erreur s'affiche, puis définissez l'option (ou d'appel InternetErrorDlg) et soumettez à nouveau.

Références

Pour plus d'informations, consultez l'article suivant dans la base de connaissances Microsoft :
168151  (http://support.microsoft.com/kb/168151/EN-US/ ) Procédure pour rendre les demandes SSL à l'aide de WinInet

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Internet Explorer 4.0 Édition 128 bits
  • Microsoft Internet Explorer 4.01 Service Pack 2
Mots-clés : 
kbmt kberrmsg KB182888 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 182888  (http://support.microsoft.com/kb/182888/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Retired KB ArticleExclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.