WordPress: ошибка "Peer certificate cannot be authenticated with known CA certificates"

При попытке обновить свою 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

Peer certificate cannot be authenticated with known CA certificates wordpress

Когда я попытался на время деактивировать подблог lifehack и без него обновить сеть, то ошибка жаловалась уже на другой подблог и так далее.

Я нашел два способа решения этой проблемы:

  1. редактирование файла "wp-includes/class-http.php" - им я пользовался до тех пор пока не нашел второй метод
  2. прописывание кода в свой плагин

Редактируем файл 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, второй способ мне нравится больше чем первый.

Понравилось? =) Поделись с друзьями:

Обсуждение записи “WordPress: ошибка "Peer certificate cannot be authenticated with known CA certificates"”

  1. name nika (olgworld.com) says:

    Привет.Хорошо иметь технические мозги.Я когда смотрю на эти файлы чувствую себя не совсем хорошо.Купила книгу по WP читаю ее и пытаюсь понять.Хотя все очень сложно, если ты биолог.
    Владимир, вопрос по поводу мультиблога.У меня есть сайт тема которого перестала быть актуальной.Там висит несколько статей.Для того, чтобы переделать его на мультиблог необходимо удалить все статьи?Я хочу сделать из этого домена записную книжку.Или лучше новый домен купить?(Как-то последний вариант мне не очень нравиться).
    Владимир,а с чего все начинать переделывать? Видимо надо закрыть блог от индексации? или еще как-то иначе запретить доступ на сайт?

Обсудить