#概要
CakePHP3でGoogleのOAuthを導入したところ、しばしばサーバエラーとなり認証が失敗し、すぐ同じ認証にチャレンジすると成功します。この時CakePHPのerror_logには下記のエラーが記録されています。
Error: [PDOException] SQLSTATE[HY000]: General error: 7 SSL error: no start line
このエラーの検出方法と、解決方法を記します。
#詳細
Googleログインと、Facebookログインを導入した時、Facebookログインでは特に問題は無かったもののGoogleログインでたまにログイン時に500エラーが発生して認証の後の処理が失敗することがありました。ただすぐ後に再認証すると問題なく認証できたのでプログラム側の問題というよりサーバの設定の問題かもしれない認識でいました。
問題が起きたときのCakePHPのログを見てみると、PDOExceptionとあるので、Google側の通信ではなくPostgreSQLとの通信だという事が判ります。意外なことにPostgreSQLはデフォルトでSSL接続するようになっています。AWSでRDSとEC2をVPCで接続して使っている場合、通信内容はVPC内に隠蔽されるのでSSLである必要はありません。
そこで、PostgreSQLの通信内容を非SSLに変更するようにしました。
#解決方法
Apacheから起動するPHPの場合 /etc/sysconfig/httpd の最後の行に
export PGSSLMODE=disable
として、Apacheをrestartさせると非SSLモードで接続するようになります。