最近新しいサーバーをセットアップし、その上でApacheをセットアップし、新しいサイトを構築しました。
そのサイトへはPCやスマホのWebブラウザからは問題なく閲覧できていたのですが、何故かアプリのWebviewからアクセスできないという問題が発生していることが判明。
具体的には、Webview側でサイトへアクセスしようとするとステータスが”Cancelled”になる、というもの。
いろいろ調べたところ、どうやら平文では問題なく閲覧できてはいるものの、SSL(https)経由になると何故か正常に見ることができないことがわかりました。
そこで、SSL通信のチェックサービスを使って、SSLの状態を調べてみました。
SSLチェック【証明書・プロトコル・暗号スイート確認】 – cman
結果、証明書の認証チェーンに問題があることがわかりました。
ApacheではSSLの証明書の指定を行う際、下記のように書きます。
SSLCertificateFile /etc/letsencrypt/live/example.jp/fullchain.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.jp/chain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.jp/privkey.pem
今回構築したサーバーではSSL証明書にLet’s Encryptを使用しており、Apacheに入れる設定としては上記のようになります。
fullchain.pemについては1ファイルに証明書本体と中間証明書も含まれているのですが、Apacheではそのようには認識してくれず、中間証明書は別で指定する必要があります。
その中間証明書の指定が2行目の SSLCertificateChainFile の記述になります。
今回の場合、2行目のSSLCertificateChainFile が抜けていたことで証明書のチェーンが壊れてしまっていたのが原因だったのですが、PCやスマホのブラウザで見るとOSがチェーンを補完して問題なく見れてしまうため、アプリでつなげようとしてようやくエラーに気付いた形でした。
SSLを使うサイトを立ち上げた際は、ブラウザでのチェックだけでなく、ご紹介したSSLチェックツールなどでもテストしておいた方が確実かもしれません。