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でした。めでたしめでたし。