当社はIT技術のオンライン教育を得意としたセミナー専門会社です。 | 一戸英男

ITエンジニアの技術力UPをお約束します。

備忘録:cakephp2.xでSSL化した場合のトラブル「The request has been black-holed」の対処

備忘録:cakephp2.xでSSL化した場合のトラブル「The request has been black-holed」の対処


今年は7月からGoogle Chromeブラウザの非httpsなサイトをSSL化するための仕事で大忙し。 よくある問題は何かと言うと、表題の「The request has been black-holed」がcakephpで作られた環境でSSL化すると頻発するアクシデントに見舞われる。 この問題はよくある既知の問題なのでネット上にも対処方法はそこそこ見つけることができる。


しかし、人それぞれ、独特の作りかたをしているため、他人のソースコードを読み取って適材適所にコードを埋め込んだり修正するのは大変。 もう、cakephp絡みで今月に入ってから5件の案件で遭遇した。短い時間で修正すべきソースコードとその箇所を見つけるのはなかなかしんどい。

ということで、また遭遇するだろうからメモを残しておく。

対象Controllerを修正する

概ね以下のようなコードを挿入する。システムの作り方によるが修正箇所は大抵「app/Controller/」「app/Plugin/Admin」の下にあるメインコントローラか、機能単位のコントローラに入れることになるだろう。

cakephpのSSL化でインターナルサーバエラーの場合の回避策の一つapp/Config/core.phpの編集でエラーレベルを抑制

php.iniで既にエラーレベルが「E_ALL & ~E_DEPRECATED & ~E_STRICT」に設定されてれば問題ないが、サーバ上にある特定のアプリのみ制御するならcakephpであれば下記を修正します。

タグ: , , , , ,

コンテンツ内に埋め込まれているリンクの記述をhttps対応記述に修正


SSL化で忘れがちな修正ポイントですが、ページ内のコンテンツに含まれるファイルパス名もhttpsに対応する記述が必要です。

ページの記述をSSL対応にする理由

  • ブラウザのURL手前にでてくる鍵や盾のアイコン上に黄色い△のアイコンが被って表示される。(警告の意味)
  • 警告アイコンを見ると躊躇するユーザが一部出てくる。ページの閲覧機会損失になる。
  • 会社として程度を低く見られることもある。

このような事がありますので、是非ページ内のコンテンツもSSL化に則した内容に書き換えましょう。

では次に、SSL化に則したファイル、リンクの記述ですが3種類書き方があります。以下の方法が考えられます。

SSL化に対応したファイル、リンクの記法

  • 相対パスで書く
  • 絶対パスでhttpsから記述する。
  • プロトコル名を省略し「//ドメイン/パス名」の形式で書く。記述サンプル( //code.google.com/check.php?id=3432fdsfdt8t34 )この書き方は現在Googleが非推奨としています。理由はhttpsとhttpの両方をサポートする書き方だからフィルタリングが難しいのでしょう。

どれでも良いのですが、一番良いのは相対パスだと思います。書き方は混在しても問題ありませんがベースのやり方は統一したほうが良いでしょう。

また、事情により参照しているリンクがhttpsに対応していない場合は諦めましょう。でもいずれそのサイトもまともならhttps対応するはず。
全体的にどうしてもそうなってしまうページはあると思います。三角マークが少なければ印象は悪くないと思います。TOPページは絶対にhttpの外部リンクがあるなら外すべきです。尚、外部の通常リンクがhttp://であることは問題ありません。
自分のサイトの一部となるjavascriptや画像、動画などは外部から供給される場合は注意が必要です。

タグ: , , , ,

SSL化対応-サーバーの起動


SSL化の設定が完了したら、WEBサーバの再起動を行います。

古いOS起動方法



新しいOS起動方法

タグ: , ,

SSL化対応-証明書をWEBサーバに埋め込む


色々なWEBサーバにより指定方法が異なりますが一般的であるApache Webサーバを例にとって説明していきたいと思います。

現在Linuxサーバで使われているApacheのバージョンは概ね2種類の系統がありバージョン2.2系とバージョン2.4系になりますが、バージョンにより設定が若干異なります。

サーバ証明書とサーバーキー(秘密鍵)の設定

まず最初にApache2.2系での設定を見ていこう。


Apache2.2 ssl.confで重要なディレクティブ)

NameVirtualhost *:443
LoadModule ssl_module modules/mod_ssl.so
Listen 443
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 -TLSV1
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SSLv3:!SSLv2:!TLSv1
SSLCertificateFile SSL証明書発行局から頂いているサーバ証明書ファイルのパス
SSLCertificateKeyFile SSL証明書を発行局に申請するCSRファイルを生成する段階で使った秘密鍵ファイル
SSLCertificateChainFile SSL証明書発行局から頂いている中間証明書


Apache2.4 ssl.confで重要なディレクティブ)

Apache2.4からNameVirtualHostは必要でなくなりました。

LoadModule ssl_module modules/mod_ssl.so
Listen 443
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 -TLSV1
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SSLv3:!SSLv2:!TLSv1
SSLCertificateFile
SSLCertificateFile SSL証明書発行局から頂いているサーバ証明書ファイルのパス
SSLCertificateKeyFile SSL証明書を発行局に申請するCSRファイルを生成する段階で使った秘密鍵ファイル

Apache 2.4.8以降をご利用の方

Apache 2.4.8 から中間CA証明書を指定するSSLCertificateChainFile ディレクティブが廃止されたので設定ファイルはコメントのままにしておきましょう。
中間CA証明書、クロスルート証明書の類はサーバ証明書とその他の証明書ファイルマージしてください。そのうえでSSLCertificateFileディレクティブにそのファイルを指定してください。

<<マージの例>>

タグ: , , ,

SSL化対応-証明書の受け取り


SSL証明書の申請が受理される途中段階で発行局により指示がでます。承認方法は何種類か存在します。つまり本人確認を証明するための手段が何種類か存在しその中の何れかを選択あるいは、発行局が指示して承認処理が進みます。

幾つかの承認方法

  • メール確認。whoisに登録されたドメインオーナのメールアドレス、又はどのドメインにもありがちな典型的なメールアドレスに確認用のURLが送られ、そのリンクを踏むと承認される

  • ファイル法。メールアドレスで送られてきた暗号コードが入った内容のファイルを指定フォルダーのファイル設置で発行局が確認し承認が行われる
  • ドメイン法。メールアドレスに送られてきたコードをドメインのTXTレコードに記述することで発行局が確認し承認が行われる

※尚、申請情報に問題があれば上記承認前に却下の通知がメールで届きます。

承認後の流れ

  • メールにアーカイブで証明書類が添付される(概ねZIPファイルで添付かメールテキストラインに暗号化コードが貼り付けられているのを人のファイルに保存)
  • 添付は基本、サーバ証明書、CA発行局のチェーンファイル、CA発行局の証明書が添付されている。チェーンファイルがない場合もある
  • ブラウザに該当の発行局の証明書が存在しない場合はCA発行局の証明書を手動でインストールする必要がある場合が稀に発生する。
  • WEBサーバのサーバ設定ファイル(仮想サーバ設定も含む)に一致するサーバ証明書や発行局の証明ファイルを埋め込んで再起動できるように配置する。

タグ: , , , ,

1 2