J'ai mis à niveau mon installation multisite WordPress vers 3.6.1. Et après cela, quand je fais Network Upgrade > Database Upgrade
, il montre:
Attention! Problème de mise à jour
http://www.example.com/site1
. Votre serveur peut ne pas être en mesure de se connecter aux sites qui y sont exécutés.Message d'erreur: Impossible d'authentifier un certificat homologue avec des certificats d'autorité de certification connus
Qu'est-il arrivé s'il vous plaît?
Si possible, essayez de corriger la cause de cette erreur: certificats SSL non valides. Mais dans certains cas, cela n’est ni possible ni souhaitable. L'une d'elles est les sites de développement utilisant des certificats SSL auto-signés.
Une solution consiste à définir $ ssl_verify sur false avant la ligne 1161 de wp-includes/class-http.php:
curl_setopt( $handle, CURLOPT_SSL_VERIFYHOST, ( $ssl_verify === true ) ? 2 : false )
La façon dont j'ai fait cela dans le passé est en ajoutant:
$ssl_verify = false;
Vers la ligne 1159, avant de procéder à une mise à niveau multi-site, puis de la supprimer. Il semble qu'il devrait y avoir une manière beaucoup plus sophistiquée de le faire. D'après le code qui l'entoure, il semble que vous devriez être en mesure d'analyser le paramètre paramater sslverify = false mais cela ne semble pas fonctionner (probablement parce que le wrapper de mise à niveau ne passe pas par les paramètres).
Pour éviter d'apporter des modifications à Core, annulez cette modification une fois la mise à niveau terminée.
Je ne sais pas si cela aidera ou non, mais cela vaut la peine d'essayer. Créer un Doit utiliser le plugin et supprimer ces lignes, voir les commentaires du code:
<?php
/* Plugin Name: Network upgrade exception */
// Run only in the Upgrade screen
add_action( 'load-upgrade.php', 'add_filter_wpse_115279' );
function add_filter_wpse_115279()
{
add_filter( 'http_request_args', 'apply_filter_wpse_115279', 10, 2 );
}
// http://core.trac.wordpress.org/browser/tags/3.6.1/wp-admin/network/upgrade.php#L68
// wp_remote_get( $upgrade_url, array( 'timeout' => 120, 'httpversion' => '1.1' ) );
// This function will end up calling WP_Http class, where we can use the filter http_request_args
function apply_filter_wpse_115279( $args, $url )
{
# Adjust var <----------------------------------
$ms_domain_to_check = 'http://example.com/site1/';
if( FALSE !== strpos( $url, $ms_domain_to_check ) )
{
$args['sslverify'] = false;
}
return $args;
}
/**
* Full list of arguments in
* http://core.trac.wordpress.org/browser/tags/3.6.1/wp-includes/class-http.php#L84
$defaults = array(
'method' => 'GET',
'timeout' => apply_filters( 'http_request_timeout', 5),
'redirection' => apply_filters( 'http_request_redirection_count', 5),
'httpversion' => apply_filters( 'http_request_version', '1.0'),
'user-agent' => apply_filters( 'http_headers_useragent', 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) ),
'reject_unsafe_urls' => apply_filters( 'http_request_reject_unsafe_urls', false ),
'blocking' => true,
'headers' => array(),
'cookies' => array(),
'body' => null,
'compress' => false,
'decompress' => true,
'sslverify' => true,
'stream' => false,
'filename' => null,
'limit_response_size' => null,
);
*/
Cette erreur est probablement due à l'utilisation de cURL dans le processus de mise à jour multisite de Wordpress. Par défaut, cURL essaiera de vérifier le certificat SSL avec une autorité de certification acceptée dans un ensemble de certificats d’autorité de certification.
Vous avez au moins quatre options:
Assurez-vous que vous utilisez la dernière version de cURL dans votre installation PHP pour vous assurer que l'ensemble de l'autorité de certification utilisée est mis à jour.
Définissez manuellement le chemin d'accès à votre certificat SSL:
curl_setopt($connection, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($AuthNetConn, CURLOPT_CAINFO, "path:/ca-bundle.crt");
Ignorer la vérification SSL:
curl_setopt($connection, CURLOPT_SSL_VERIFYPEER, false);
Vérifiez que votre certificat SSL est valide et émis par une autorité de certification acceptée.
Pour les options 2 et 3, vous devrez peut-être filtrer les arguments utilisés par WordPress pour effectuer les requêtes http.
Voir la réponse de @ brasofilo, cela peut fonctionner.
Quoi qu'il en soit, vous devez rechercher pourquoi la vérification de SSL échoue au lieu de simplement la contourner.
Dans de nombreux cas, vous pouvez utiliser le filtre suivant pour désactiver la vérification locale de ssl. Ceci est utile pour les erreurs de certificats auto-signés.
add_filter('https_local_ssl_verify', '__return_false');
La version actuelle v4.3.0 détermine si une demande est "locale" avec ce qui suit, dans wp-includes/class-http.php
// Determine if this request is to OUR install of WordPress.
$homeURL = parse_url( get_bloginfo( 'url' ) );
$r['local'] = 'localhost' == $arrURL['Host'] || ( isset( $homeURL['Host'] ) && $homeURL['Host'] == $arrURL['Host'] );
unset( $homeURL );
Dans certains cas, la prise en compte locale risque de ne pas fonctionner. Dans ce cas, vous pouvez envisager le filtre plus inclusif, add_filter('https_ssl_verify', '__return_false');
.
Les installations multisites avec des schémas mixtes http
et https
peuvent trouver plus d'informations sur trac, upgrade.php échoue avec des sites mixtes HTTPS (SSL) et HTTP simple
Quoi qu'il en soit, une solution manuelle consiste à visiter le /wp-admin/upgrade.php
de chaque site enfant.
Une autre description associée, http://scottnelle.com/683/ssl-error-upgrading-wordpress-multisite-network/
Comme mentionné précédemment Scott Nelle suggère ceci:
Créez un fichier dans wpcontent/mu-plugins/
et nommez-le comme suit: network-upgrade-ignore-ssl.php
. Mettez ce qui suit dans le fichier:
<?php
add_filter('https_ssl_verify', '__return_false');
add_filter('https_local_ssl_verify', '__return_false');
?>
Il est possible de mettre à jour/mettre à jour la base de données pour chaque site enfant individuellement en visitant:
https://rootsite/subsite/wp-admin/upgrade.php
Voir également le ticket de transport trac lié, La base de données n'est pas mise à niveau dans un multisite si le bouclage est désactivé