VBA ServerXMLHTTP demande https avec un certificat auto-signé

j'utilise un objet ServerXMLHTTP pour faire des requêtes http sur un script VBA excel 2007.

mais je dois me connecter à un serveur https qui utilise un certificat SSL auto-signé, donc par défaut je reçois le message "l'autorité de certificat est invalide ou incorrecte". Y a-t-il un moyen de configurer L'objet ServerXMLHTTP pour qu'il n'ait pas besoin d'un certificat de L'AC?

un exemple de code suivante:

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
  objHTTP.Open "POST", "https://invernalia.homelinux.net", False, "user", "password"
  objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
  objHTTP.send ("")
15
demandé sur Javier Novoa C. 2012-07-20 08:45:21

2 réponses

j'ai eu ce problème pendant un certain temps, et j'ai seulement réussi à la surmonter grâce à ceci:

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.SetOption(2, objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)
objHTTP.Open "POST", "https://invernalia.homelinux.net", False, "user", "password"
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")

j'ai trouvé ce ici Méthode setOption et méthode getOption

ici dans ce code je viens d'utiliser SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS mais vous pouvez essayer avec d'autres plus spécifiques:

  • SXH_SERVER_CERT_IGNORE_WRONG_USAGE
  • SXH_SERVER_CERT_IGNORE_CERT_CN_INVALID
  • SXH_SERVER_CERT_IGNORE_CERT_DATE_INVALID
  • SXH_SERVER_CERT_IGNORE_UNKNOWN_CA
26
répondu Romain 2012-07-22 12:42:14
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.SetOption(2, objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)
objHTTP.Open "POST", "https://invernalia.homelinux.net", False, "user", "password"
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")

Obtenu la solution ci-dessus pour travailler avec un changement mineur. Au lieu de:

objHTTP.SetOption(2, objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)

j'ai utilisé:

objHTTP.SetOption(2) = (objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)

Sinon, j'obtiens une erreur:

Microsoft VBScript erreur de compilation '800a0414' ne peut pas utiliser les parenthèses lors de l'appel D'un Sub objHTTP.SetOption(2, objHTTP.GetOption(2)) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)

référencés de: SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS

6
répondu Ian Flynn 2014-03-28 19:19:01