web-dev-qa-db-ja.com

マルチサイトデータベースアップグレードSSLエラー

MultisiteセットアップのWordPressを3.6.1にアップグレードしました。そしてその後、Network Upgrade > Database Upgradeを実行すると表示されます。

警告! http://www.example.com/site1の更新中に問題が発生しました。ご使用のサーバーは、それを実行しているサイトに接続できない可能性があります。

エラーメッセージ:ピア証明書は既知のCA証明書では認証できません

どうしたの?


情報

  • 私は現在、トラステッドワイルドカードSSL( 自己署名ではない )でサイトを運営していますが、ロードバランサにのみインストールされています。 (明らかに、ApacheサーバはCertをインストールしている必要はありません。) これは根本的な原因ですか?
  • データベースはAmazon RDSにあり(デフォルト設定で)、SSLはありません。 *
3
夏期劇場

可能であれば、このエラーの原因(無効なSSL証明書)を試して修正する必要があります。しかし、これが不可能または望ましくない場合がいくつかあります。自明の1つは、自己署名SSL証明書を使用する開発サイトです。

これを回避する1つの方法は、wp-includes/class-http.phpの1161行目の前に$ ssl_verifyをfalseに設定することです。

curl_setopt( $handle, CURLOPT_SSL_VERIFYHOST, ( $ssl_verify === true ) ? 2 : false )

私が過去にこれを行った方法は、以下を追加することです。

$ssl_verify = false;

マルチサイトアップグレードを行い、その後それを削除する前に、1159行目まで。もっと洗練された方法があるはずです。それは周りのコードから、あなたはparamater sslverify = falseを解析することができるべきであると判断しているがそれはうまくいかないようであると判断します(おそらくアップグレードラッパーがパラメータを渡さないためです)。

コアを変更しないようにするために、アップグレードが完了したらこの変更を元に戻します。

1
Jona

これが役立つかどうかはわかりませんが、試してみる価値があります。 Must Use plugin を作成し、この行を削除します。コードのコメントを参照してください。

<?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,
  );

*/
7
brasofilo

そのエラーは、おそらくWordpressのマルチサイト更新プロセスでcURLが使用されているためです。デフォルトでは、cURLはバンドルされたCA証明書のセット内の承認済みCAを使用してSSL証明書を検証しようとします。

少なくとも4つの選択肢があります。

  1. PHPインストールで最後のバージョンのcURLを使用していることを確認して、使用済みCAのセットが確実に更新されるようにしてください。

  2. SSL証明書へのパスを手動で設定します。

    curl_setopt($connection, CURLOPT_SSL_VERIFYPEER, 1);curl_setopt($AuthNetConn, CURLOPT_CAINFO, "path:/ca-bundle.crt");

  3. SSL検証をバイパスします。

    curl_setopt($connection, CURLOPT_SSL_VERIFYPEER, false);

  4. SSL証明書が有効で、承認されたCAによって発行されていることを確認してください。

オプション2と3では、httpリクエストを行うためにWordPressによって使用される引数をフィルタリングする必要があるかもしれません。
@ brasofiloの答えを見てください、それはうまくいくかもしれません。

とにかく、単にSSLを迂回するのではなく、なぜSSLの検証が失敗するのかを調査する必要があります。

2
cybmeta

多くの場合、次のフィルタを使用してローカルSSL検証を無効にすることができます。これは自己署名証明書のエラーに役立ちます。

add_filter('https_local_ssl_verify', '__return_false');

現在のバージョンv4.3.0では、 wp-includes/class-http.php に以下のようにリクエストが "local"であるかどうかを判断します。

// 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 );

場合によっては、ローカルの考慮事項が機能しない可能性があります。その場合は、より包括的なフィルタadd_filter('https_ssl_verify', '__return_false');を考慮する必要があります。

httphttpsを混在させたマルチサイトインストールでは、tracに関するより多くの情報が見つかるかもしれません、 upgrade.phpは混在したHTTPS(SSL)と単純なHTTPサイトで失敗します

それにもかかわらず、手動による回避策は、各子サイトの/wp-admin/upgrade.phpにアクセスすることです。

別の関連する説明、 http://scottnelle.com/683/ssl-error-upgrading-wordpress-multisite-network/ /

1
here

前述のように Scott Nelle はこれを示唆している。

wpcontent/mu-plugins/にファイルを作成し、network-upgrade-ignore-ssl.phpのような名前を付けます。ファイルに以下を追加してください。

<?php
   add_filter('https_ssl_verify', '__return_false');
   add_filter('https_local_ssl_verify', '__return_false');
?>
0
habakuk

次のサイトにアクセスして、各子サイトのデータベースを個別にアップグレード/更新することができます。

https://rootsite/subsite/wp-admin/upgrade.php

関連するコアのTracチケットも参照してください。 ループバックが無効になっているとデータベースがマルチサイトでアップグレードされない

0
here