При попытке обновить свою worpdress сеть, на вкладке "Обновить сеть" я получал следующее сообщение:
Внимание! Проблема при обновлении https://elims.org.ua/lifehack Похоже, сервер не имеет возможности подключаться к находящимся на нём сайтам. Текст ошибки: Peer certificate cannot be authenticated with known CA certificates wordpress
Или по английски:
Warning! Problem updating https://[hostname]/[nameOfBlog]. Your server may not be able to connect to sites running on it. Error message: Peer certificate cannot be authenticated with known CA certificates
Когда я попытался на время деактивировать подблог lifehack и без него обновить сеть, то ошибка жаловалась уже на другой подблог и так далее.
Я нашел два способа решения этой проблемы:
- редактирование файла "wp-includes/class-http.php" - им я пользовался до тех пор пока не нашел второй метод
- прописывание кода в свой плагин
Редактируем файл wp-includes/class-http.php
Чтобы обойти эту проблему нужно отредактировать файл "wp-includes/class-http.php" на время обновления.
Найдите в файле, приблизительно около 1400 строки, вот этот код:
$timeout = (int) ceil( $r['timeout'] ); curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, $timeout ); curl_setopt( $handle, CURLOPT_TIMEOUT, $timeout ); curl_setopt( $handle, CURLOPT_URL, $url); curl_setopt( $handle, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $handle, CURLOPT_SSL_VERIFYHOST, ( $ssl_verify === true ) ? 2 : false ); curl_setopt( $handle, CURLOPT_SSL_VERIFYPEER, $ssl_verify ); curl_setopt( $handle, CURLOPT_CAINFO, $r['sslcertificates'] ); curl_setopt( $handle, CURLOPT_USERAGENT, $r['user-agent'] );
и добавьте к нему "$ssl_verify = false;", чтобы вышло следующее:
$timeout = (int) ceil( $r['timeout'] ); curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, $timeout ); curl_setopt( $handle, CURLOPT_TIMEOUT, $timeout ); $ssl_verify = false; curl_setopt( $handle, CURLOPT_URL, $url); curl_setopt( $handle, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $handle, CURLOPT_SSL_VERIFYHOST, ( $ssl_verify === true ) ? 2 : false ); curl_setopt( $handle, CURLOPT_SSL_VERIFYPEER, $ssl_verify ); curl_setopt( $handle, CURLOPT_CAINFO, $r['sslcertificates'] ); curl_setopt( $handle, CURLOPT_USERAGENT, $r['user-agent'] );
Теперь можете обновить wordpress-сеть.
После обновления удалите строку "$ssl_verify = false;"
Подсказку нашел вот тут: wordpress.stackexchange.com/questions/115279/multisite-database-upgrade-ssl-error
Прописываем код в своем плагине
На wordpress.stackexchange.com я нашел способ с прописыванием кода в свой плагин.
Оригинальный код:
<?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, ); */
Но чтобы этот способ заработал на моем мультисайте его пришлось немного изменить.
Мой вариант кода:
//Start:убираем ошибку при обновлении сети. Текст ошибки: Peer certificate cannot be authenticated with known CA certificates add_action( 'load-upgrade.php', 'add_filter_network_update' ); // Run only in the Upgrade screen function add_filter_network_update() { add_filter( 'http_request_args', 'apply_filter_network_update', 10, 2 ); } function apply_filter_network_update( $args, $url ) { $args['sslverify'] = false; return $args; } //End:убираем ошибку при обновлении сети. Текст ошибки: Peer certificate cannot be authenticated with known CA certificates
Теперь мне не нужно будет при каждом обновлении редактировать файл wp-includes/class-http.php, второй способ мне нравится больше чем первый.
Привет.Хорошо иметь технические мозги.Я когда смотрю на эти файлы чувствую себя не совсем хорошо.Купила книгу по WP читаю ее и пытаюсь понять.Хотя все очень сложно, если ты биолог.
Владимир, вопрос по поводу мультиблога.У меня есть сайт тема которого перестала быть актуальной.Там висит несколько статей.Для того, чтобы переделать его на мультиблог необходимо удалить все статьи?Я хочу сделать из этого домена записную книжку.Или лучше новый домен купить?(Как-то последний вариант мне не очень нравиться).
Владимир,а с чего все начинать переделывать? Видимо надо закрыть блог от индексации? или еще как-то иначе запретить доступ на сайт?