ushidayの日記

主に「IBMi」のメモに・・・

ZendServer8.5 for IBM i(PHP5.6)を入れて・・・

iSUC福岡大会に参加して、モチベーションが上向いているうちに、「よーしZendServer8.5のPHP5.6に更新しよう!」と意気込んでいたら、PHP5.6からCA証明書のチェックが必須となったみたいで、SSL/TLSメール送信でコケてました。

以下の様な事が書いてありました。
「5.6.0 … peer_fingerprint と verify_peer_name が追加されました。 verify_peer のデフォルトが TRUE に変わりました。」
◆参考リンク

ソケット接続実行時エラーログ
exception 'Zend_Mail_Protocol_Exception' with message 'Could not open socket' in .../library/Zend/Mail/Protocol/Abstract.php:277
Stack trace:
#0 .../library/Zend/Mail/Protocol/Smtp.php(167): Zend_Mail_Protocol_Abstract->_connect('ssl://hogehoge.co.jp:xxx')
#1 .../library/Zend/Mail/Transport/Smtp.php(199): Zend_Mail_Protocol_Smtp->connect()
#2 .../library/Zend/Mail/Transport/Abstract.php(348): Zend_Mail_Transport_Smtp->_sendMail()
#3 .../library/Zend/Mail.php(1194): Zend_Mail_Transport_Abstract->send(Object(Zend_Mail))
#4 .../library/org/cscweb/util/mail/myMail.php(324): Zend_Mail->send(Object(Zend_Mail_Transport_Smtp))
#5 .../application/controllers/OrderController.php(408): myMail->send()
#6 .../library/Zend/Controller/Action.php(516): OrderController->mailshippinglistAction()
#7 .../library/Zend/Controller/Dispatcher/Standard.php(308): Zend_Controller_Action->dispatch('mailshippinglis...')
#8 .../library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#9 .../library/Zend/Application/Bootstrap/Bootstrap.php(105): Zend_Controller_Front->dispatch()
#10 .../library/Zend/Application.php(384): Zend_Application_Bootstrap_Bootstrap->run()
#11 .../public/index.php(110): Zend_Application->run()
#12 {main}

以下のソースをPHP5.6単体で実行したら

<?php

$fp = stream_socket_client("ssl://www.google.co.jp:443/", $errno, $errstr, 30);

if ($fp === false) {
    echo 'NG' ;
    throw new Exception($errstr);
} else {
    fclose($fp);
    echo 'OK' ;
}

こんなエラー

Warning: stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in .../test.php on line 3
Warning: stream_socket_client(): Failed to enable crypto in .../test.php on line 3
Warning: stream_socket_client(): unable to connect to ssl://www.google.co.jp:443/ (Unknown error) in .../test.php on line 3

そんな訳で「php.ini」に、以下を設定

[OpenSSL]
openssl.cafile = /QOpenSys/QIBM/UserData/SC1/OpenSSL/certs/cacert.crt
;openssl.capath = ""

ZENDSVR6のApacehインスタンスを再起動でOKでした。めでたしめでたし。