Debian 7、Nginx 1.6.2、PHP 5.4.39 を Debian 8、Nginx 1.6.2、PHP 5.6.9 にアップグレードしました。
そのサーバーでは CRM が稼働しており、以前は PHP 経由でメールを送信していました。EspoCRM は ZendFramwork2 E-Mail を使用しています (サーバー 2 経由で送信 - Thunderbird 経由で送信すると問題なく動作します)。
アップグレード後まで問題なく動作していました。現在、次のエラーが表示されています:
500 unable to connect via tls
少し検索しても CRM に関する問題は何も見つかりませんでしたが、自己署名証明書や上のスタック (NGinx/PHP?) にある問題が指摘されました。
どこから調査を始めればよいか、何かアイデアはありますか? CRM サーバーでは、エラー ログに何も記録されていません (CRM によって取り込まれていると思われます)。maiml
サーバーの syslog や authlog にも何も表示されません。
編集: 情報を追加:
phpinfo ()
Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, tls, tlsv1.0, tlsv1.1, tlsv1.2
curl
SSL Yes
SSL Version OpenSSL/1.0.1k
imap
SSL Support enabled
openssl
OpenSSL support enabled OpenSSL
Library Version OpenSSL 1.0.1k 8 Jan 2015 OpenSSL Header Version
OpenSSL 1.0.1k 8 Jan 2015 Directive Local Value Master Value
openssl.cafile no value no value openssl.capath no value no value
Phar
OpenSSL support enabled
私は Debian 7 の古い設定ファイルを使用しました (NGinx は同じバージョンです - D7 のバックポートを使用しました)。
サーバーおよびソフトウェア:
サーバーA: メールサーバー、Debian 6、Postfix、自己署名証明書
サーバーB: Debian 8、Nginx、PHP、EspoCRM - TLS はローカル PC 上の Thunderbird で動作しており、Debian 7 から 8 へのアップグレード前も動作していたため、TLS を選択しました。
ローカルPC: Kubuntu、Thunderbird、メールは TLS 経由で送受信できます。
答え1
私の理解するところによると、PHP 5.6 では自己署名証明書の受け入れ、検証、または処理は許可されません。
http://php.net/manual/en/migration56.openssl.php
ピアとピア名の検証を無効にする必要があります
$streamContext = stream_context_create([
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false
]
]);
これをパッケージ内で実行しようとすると (設計上のようですが)、簡単ではありません。php.ini にいくつかのフラグを設定するなど、単純なことはできません。
答え2
500 TLS経由で接続できません
これは問題がどこにあるかを特定するのにはあまり役立ちませんが、おそらくメンテナンスしていないコードのどこかに問題があるはずなので、コードを修正して動作させるのは最後の手段にすべきです。
このエラーを引き起こすアクションを知っておくと役立ちます。
マニフェスト内で自己署名証明書について言及している唯一の場所はメール サーバーであるため、ここで問題の原因となっているのはメール サーバーであると想定します。
必要なのは、アプリケーションが存在するホスト上の承認された認証局に自己署名証明書を追加することだけです。ここでも、MTA が SMTPS を使用していると仮定します。
openssl s_client -showcerts -connect servera.example.com:465 </dev/null
証明書チェーンが提供されます。出力を(例えば)にコピーして/etc/ssl/certs/lbutlr_local.crt
実行します。update-ca-certificates