Est-il sûr d'utiliser sslverify => true for avec wp_remote_get / wp_remote_post

18

J'utilise normalement cet argument pour éviter les erreurs avec wp_remote_getetwp_remote_post

array(
    'sslverify' => false
)

Pour des raisons de sécurité, je voudrais le définir sur true(ou le supprimer car la valeur par défaut est true).

Dois-je m'attendre à des problèmes en faisant cela?

Xaver
la source

Réponses:

23

TL; DR: Oui, supprimez ce paramètre à partir de WordPress 3.7 ou version ultérieure.

Dans le passé, de nombreuses personnes ont ajouté le paramètre sslverify = false spécifiquement parce que leur installation de PHP n'a pas pu vérifier correctement le certificat.

En général, cela était dû au fait que l'installation PHP n'avait pas été mise à jour avec la dernière copie des certificats racine CA. Les certificats racine changent de temps en temps, et normalement vous ne remarquez pas ce changement car il se produit dans les mises à jour normales du navigateur. Eh bien, lorsque PHP fonctionne comme un navigateur pour récupérer les URL https, il a également besoin de ces mises à jour du certificat racine. Et la plupart des hôtes ne mettent jamais à jour PHP, ni ne mettent à jour aucune partie spécifique de celui-ci (comme le fichier de certificats).

Lorsque WordPress a implémenté la mise à jour automatique dans la version 3.7, il a été jugé nécessaire de mettre à niveau les API WordPress.org pour exiger une communication sécurisée. À cette époque, WordPress a commencé à inclure une copie du fichier CA Root Certificates lui-même, provenant de Mozilla. Depuis WordPress 3.7, par conséquent, les fonctions de l'API WP_HTTP utilisent ce fichier pour effectuer la vérification des certificats, et non la version ancienne ou obsolète fournie avec votre installation PHP.

Par conséquent, oui, avec WordPress 3.7 ou version ultérieure, il est conseillé de supprimer le paramètre sslverify et de permettre aux fonctions http de vérifier correctement le certificat. Tout serveur moderne exécutant SSL avec une clé signée par l'une des autorités de certification connues sera vérifié correctement. Le WP_HTTP devrait avoir une copie des derniers certificats racine, et le projet principal mettra à jour ce fichier de certificats dans WordPress avec les mises à jour normales.

Otto
la source
Merci Otto, je pense que cela aide beaucoup. Je ferai une vérification conditionnelle dans mon plugin
Xaver
9

Il y a des tonnes de raisons qui peuvent faire échouer une vérification SSL. À partir d'un trop grand nombre de redirections vers des .inifichiers / configurations incorrects ou simplement des certificats ou des sous-domaines manquants. Dans tous les cas, vous devrez rechercher la raison de cela et y remédier . Il n'y a aucun moyen de contourner cela.

Mais pour contourner temporairement ce problème (disons que vous devez développer votre code et corriger l'erreur SSL plus tard), vous pouvez utiliser un filtre:

add_filter( 'https_ssl_verify', '__return_false' );

Comme vous l'exécutez pendant une demande distante, vous devez l'encapsuler dans un rappel attaché à un filtre qui est déclenché lors d'une telle demande HTTP. Assurez-vous de vérifier si vous supprimez vraiment la vérification du cas correct - et assurez-vous de ne l'exécuter qu'une seule fois pour ne pas sécuriser les autres demandes.

add_filter( 'http_request_args', function( $params, $url )
{
    // find out if this is the request you are targeting and if not: abort
    if ( 'foo' !== $params['foo'] )
         return $params;

    add_filter( 'https_ssl_verify', '__return_false' );

    return $params;
}, 10, 2 );

S'il s'agit d'un plugin distribué publiquement, vous souhaiterez peut-être l'associer à une option simple que l'utilisateur peut activer ou désactiver. Vous pouvez également essayer la demande vérifiée en premier et sinon (et si l'utilisateur a opté pour une demande non signée), puis basculer vers une demande potentiellement dangereuse.

Règle générale:

N'effectuez jamais de demande non sécurisée tant que votre utilisateur n'a pas accepté de le faire et n'a pas connaissance des risques.

kaiser
la source
1
Merci, je recherche maintenant le problème sur mon environnement local
Xaver
4

WordPress peut s'appuyer sur un logiciel serveur sous-jacent (généralement cURL) pour effectuer une requête réseau. En résumé, c'est pour cela que ce logiciel est bon et qu'il est là.

Sur certains serveurs pour diverses raisons (je n'avais jamais pris la peine de me regarder), il est tout à fait typique que le logiciel serveur ne soit pas en mesure de "vérifier" les connexions sécurisées, produisant lesdites erreurs.

Donc:

  • s'il s'agit de code privé sur les serveurs que vous contrôlez, vous devez vous assurer que les serveurs effectuent correctement les requêtes et que ce paramètre n'est pas désactivé.
  • si c'est du code pour la distribution publique, vous ne voudrez probablement pas le désactiver non plus, mais s'il est assez populaire, il se retrouvera sur des serveurs où il est cassé à un moment donné et vous devrez le prendre en charge sous une forme (en disant aux gens cette configuration appropriée est censée fournir un paramètre pour le désactiver pour vos demandes, etc.)
Rarst
la source