概要
php5.3からphp7.4にバージョンアップしたところ、WordpressプラグインのWP Mail SMTPで以下のエラーが発生したので、その対処についてのメモ。
stream_socket_enable_crypto(): Peer certificate CN=`*.example.com’ did not match
エラー原因
原因はphp5.6からOpenSSLがバージョンアップし、ピア証明書が必須になったため。証明書がないとエラーが発生する。
暗号化されたすべてのクライアントストリームで、ピア検証がデフォルトで有効になりました。 デフォルトでは、OpenSSL のデフォルト CA > バンドルを使ってピア証明書を検証します。 たいていの場合は、正しい SSL 証明書を持つサーバーと通信するならこれを変更する必要> はありません。 OpenSSL が、よく知られた CA バンドルを使うように設定されているからです。
対処方法
対処方法としては、証明書を用意するか、php.iniの変更か、PHPMailerのSMTP Options
で設定するかのいずれか。
WP Mail SMTPの場合、functions.phpに以下のコードで追加する。
functions.php
// WP Mail SMTPでメール送信元が効かなかったので設定。(証明書エラーとは関係ない)
add_filter( 'wp_mail_from', function() {
return 'info@gmail.com'; // 送信元メールアドレス
} );
// これ以降が証明書エラーのための設定。
function my_wp_mail_smtp_custom_options ( $phpmailer ) {
if ( isset( $phpmailer->SMTPAuth ) ) {
if ( $phpmailer->SMTPAuth == true ) {
$phpmailer->SMTPOptions = array('ssl' =>
array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true));
}
}
return $phpmailer;
}
add_filter("wp_mail_smtp_custom_options", "my_wp_mail_smtp_custom_options");
各オプションの説明は以下の通り。
オプション | 説明 | 初期値 |
---|---|---|
verify_peer | SSLサーバー証明書の検証を要求するか否か | TRUE |
verify_peer_name | ピア名の検証を要求するか否か | TRUE |
allow_self_signed | 自己証明の証明書を許可するか否か | FALSE |