昨日、ブログの証明書が期限切れになりました。証明書を更新する際に、MySSLウェブサイトでサイトのセキュリティ状況をチェックしました。HSTS が有効になっていないため、A の評価しか得られず、A + にするためにブログに HSTS を追加し、全サイトで HTTPS を有効にしました。
Nginx で HSTS を有効にする#
HSTS(HTTP Strict Transport Security)は、インターネットエンジニアリングタスクフォースによって公開されたインターネットセキュリティポリシーメカニズムのセットです。その主な目的は次のとおりです:
- クライアント(ブラウザなど)に HTTPS を使用してサーバーとの接続を強制する
- ウェブサイトを保護し、セッションハイジャックのリスクを減らす
有効にする方法は非常に簡単です。lnmp でデプロイされたウェブサイトを例に説明します。まず、nginx のサイトの設定ディレクトリに移動します:
cd /usr/local/nginx/conf/
次に、nginx ディレクトリの中でサイトの設定ファイルdomain.com.conf
を開き、Server 443 の下に次の行を追加します:
# HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
その後、チェックを行うと、評価が A + に変わっていることがわかります:
全サイト HTTPS を有効にする#
以前に一部の全サイト HTTPS の作業を行っていたため、今回は補完と改善のみを行います。詳細な内容はインターネットで検索してください。
- Typecho の管理画面にログインし、設定→基本設定→サイトアドレスに移動し、https のドメインに変更します。
- Typecho のサイトのルートディレクトリにある config.inc.php ファイルを編集し、次の行を追加します:
/** HTTPSを有効にする */
define('__TYPECHO_SECURE__',true);
- テーマフォルダ内の comments.php ファイルを編集し、
$this->commentUrl()
を次のように置き換えます:
echo str_replace("http","https",$this->commentUrl());
- サイトで使用されている添付ファイルの URL を https に更新し、以下の SQL データベース操作を実行します。domain.com はサイトのドメインです:
UPDATE `typecho_contents` SET `text` = REPLACE(`text`,'http://domain.com','https://domain.com');
-
ウェブサーバー(Nginx)を使用して、80 ポート(HTTP)を 443 ポート(HTTPS)にリダイレクトし、全サイトで HTTPS を強制します。
-
最後に、Chrome ブラウザを開いて F12 を押すと、「This page is secure (valid HTTPS)」というメッセージが表示されます。