Linux Server

常時SSL化後にしておくべき追加設定(HSTS、Secure Cookie)

  

ご注意下さい

この記事は3年以上前に書かれた記事ですので、内容が古い可能性があります。

0
(0)

SSLサーバー証明書の導入をしてWordPressもReally Simple SSLプラグインの導入でSSL対応されましたが、今回は常時SSL化するに当たって追加で実施しておくべき項目をご紹介します。

常時SSL化の為の追加設定

  • HSTS(HTTP Strict Transport Security)設定
  • Secure Cookie設定

まず、HSTSですが、こちらはHTTPで接続した際に、強制的にHTTPSへリダイレクトし、以降のそのドメインへの接続はすべてHTTPSとする機能がHSTS (HTTP Strict Transport Security) となります。

Secure Cookieの設定について、こちらはCookieを送信する場合にはHTTPS通信に限る、という設定です。HTTPSの時に作った Cookie がHTTP通信の時に平文で送信されることになる為、盗聴されることに繋がってしまいます。

では設定方法をそれぞれ見ていきましょう。

HSTS設定

こちらはApacheのVirtualhost毎に設定をします。ポートベースのVirtualhostを利用している場合にはどのポートに対しても設定されてしまうようでコモンネームに対して効いてしまうようです。

設定は/etc/httpd/conf.d/ssl.confに対して行います。
Virtualhostごとに以下の記述をすればOKです。

Header set Strict-Transport-Security "max-age=31536000"
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA

SSLCertificateFile /etc/ssl/certs/kamata-net.jp.crt
SSLCertificateKeyFile /etc/ssl/certs/kamata-net.jp.key
SSLCertificateChainFile /etc/ssl/certs/kamata-net.jp.ca
~

オプションとしては、includeSubDomains、preloadもありますが、こちらはドメイン全てのWebサーバーがSSLで運用されている必要がありますので私の場合は設定できません(私の場合はblog.kamata-net.comドメインのみSSL運用)。

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

ちなみに、31536000は31536000秒で1年(365日)の指定となります。当サイトにHTTPでアクセスしても次回のアクセスからはHTTPSでの通信を1年間強制します。プリロードHSTSという仕組みを使ってブラウザ側にドメインリストを持たせれば初回からのHTTPS通信が可能ですが、ドメイン全てのWebサーバーがSSL運用されている必要があるため、私の場合は適用ができないことになります。

また自己署名証明書(オレオレ証明書)を利用しているとHSTSは使えないようです。

さて、Apacheの再起動前にChromeを起動してアドレスバーに「chrome://net-internals/#hsts」と入力して下の方のQuery Domainで「blog.kamata-net.com」と入力してみましょう。

Not Foundと表示されHSTS関連の情報は何もでませんでしたね。続いてApacheの再起動後Chromeでご自身のサイトにアクセス後、再度検索を掛けてみてください。

これでHSTSの設定が反映されたことが確認できました。

Secure Cookie設定

こちらはphp.iniでサーバー全体に設定を効かせるやり方と.htaccessで個別に効かせるやり方があるようです。
私は特定ドメインのみの設定としたいため、後者のやり方で実施します。

WordPressのドキュメントルート直下の.htaccessに以下の一行を追加するだけです。


# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

php_flag session.cookie_secure On


と思ったら500/Internal Server Errorとなってしまいました。よく考えればPHPはモジュール版ではなくCGI版でした。ということでphp.iniを修正します。

; Whether to use cookies.
; http://php.net/session.use-cookies
session.use_cookies = 1

; http://php.net/session.cookie-secure
;session.cookie_secure =
session.cookie_secure = 1

さらによく考えれば個人情報を送信するようなフォームもなく、ユーザ名とパスワードを要求するようなサイトでもありませんでした。。。

下記のようなスクリプトを一時作成してWebサーバに配置して叩いたところ、

<?php
phpinfo();
?>

設定前は、下記の通り無効になっていましたが、

設定してWebサーバを念のためリブート後は有効になっていました。

setoatu
80ポートもそのうちに潰そうと思います。

この記事は役に立ちましたか? | Is this article useful for you?

評価をお願いします | Please leave your rating.

平均 | Av.: 0 / 5. 投票数 | Votes: 0

最初の評価を下さい | Please vote for the first rating.

-Linux Server
-, , ,

© 1999 - 2021 蒲田ネット