httpからhttpsへ移行しました。

httpで始まるURLは「安全ではありません」とWebブラウザに怒られる今日この頃、遅ればせながら本サイトをSSL/TLS化。「https://blue-black.ink」へ移行させました。
その手順の記録です。

移行時の環境

  • サーバ機:Mac mini 2018
  • サーバソフトウェア: MAMP 5.3 (367)
    • Webサーバ: Apache 2.2.34
    • MySQL: 5.7.25
  • ブログ: WordPress 5.1.1

 

SSL/TLSサーバ証明書の入手

Let’s Encryptという認証局が無料で証明書を発行してくれます。良い時代になりました。
Let’s Encryptについては、こちらのポータルサイトが分かりやすいと思います。

Let’s Encrypt 総合ポータル(非公式解説サイト)

サイト証明書? 公開鍵? 秘密鍵? 署名?…..でも大丈夫。Let’s Encryptは、証明書を管理するクライアントソフトウェア「Certbot」を提供しているので、比較的簡単に証明書を発行することが出来ます。

Macの場合、Homebrewによるインストールが簡単です。
入ってない人はHomebrewをインストールしましょう。

Certbotのインストールは次のコマンドです。

 

当サイトblue-black.inkのサイト証明書をCertbotを使って発行しましょう。

コマンドはこちら。-wオプションでドキュメントルートを、-dオプションでURLを指定します。
Macの場合、sudoが必要です。

Let’s Encryptの証明書関係ファイルは、/etc/letsencrypt/以下に収められます。

 

証明書のパーミッション等を変更する

Webサーバのプロセス(httpd)を確認してみました。8プロセスが動作中でUIDが501、これはユーザpiのUIDです。
一方、/etc/letsencrypt/内のディレクトリやファイルの所有はrootになっており、パーミッションの関係でrootしか証明書を開くことが出来ません。

 

httpdはrootではないのでこのままでは証明書を開くことが出来ません。そこで、piが証明書を読めるように設定します。

Webサーバと関連付ける証明書がどこにあるかというと、live/以下のディレクトリにあります。拡張子がpemである4つのファイルです。
なお、4つ全部が必要なわけではなく、Webサーバの種類やバージョンによって必要なファイルが異なります。

live/にあるpemファイルはシンボリックリンクです。その本体はarchive/にあります。証明書本体は更新する度にファイル名が変わってしまいますが、Certbotが自動でシンボリックリンクを張り直してくれます。live/以下のpemファイル(シンボリックリンク)をWebサーバの設定に関連付けしておけば、証明書更新の度にWebサーバの設定を変更しなくて済むので便利です。

 

ユーザpiがpemファイルを開くことが出来るかどうか試してみましょう。中身が表示できたら成功です。httpdが証明書ファイルを読むことが出来るようになります。

 

Webサーバの設定変更

次の設定ファイルを修正します。場所は次のとおり。

/Applications/MAMP/conf/apache.httpd.conf

 

次の1行を探しだしてコメントを外しましょう。SSL/TLS関係の設定ファイルhttpd-ssl.confが有効になります。

 

SSL/TLS関係の設定ファイルを編集します。場所は次のとおり。

/Applications/MAMP/conf/apache/extra/httpd-ssl.conf

ファイルに予めテンプレが記載されています。変更した行にはマーカーを入れました。間違えないように編集しましょう。

 

 

ルータの設定変更

ポートTCP443へのアクセスが、Webサーバが稼働しているMacへ向くように、ルータを設定しましょう。
やり方はルータの取説を見てね。

 

Webサーバ再起動&HTTPSでアクセス

MAMPアプリを使ってWebサーバを再起動します。

https://blue-black.inkへアクセスします。
ページが表示されて、URL欄に鍵マークが表示されたら大成功。

 

WordPressの設定変更

ログインして「設定」→「一般」を開きます。

「WordPress アドレス (URL)」と「サイトアドレス (URL)」の設定を新アドレス「https://blue-black.ink」へ変更します。

 

.htaccessによる301リダイレクト

ブックマークやリンク経由でhttpで始まるURLへ直接アクセスされた場合の対策です。
サイトのドキュメントルートにファイル「.htaccess」を作成します。
私の環境では次のファイルです。
/Applications/MAMP/htdocs/blue-black.ink/.htaccess

次の内容を記載します。

これで、http://blue-blackink/から始まるURLが、https://blue-black.ink/で始まるURLへ301リダイレクトされます。301リダイレクトにするのはサーチエンジン対策のため。旧URL(http)と新URL(https)が同一アドレスと見なされて、旧アドレスの評価が新アドレスへ引き継がれます。

 

データベースのアドレス置換

記事に直接埋め込んた自サイトへの直リンク対策です。直リンクをクリックしたらhttpページに飛んで直ちにhttpsページにリダイレクトされるため放っておいても実害はありませんが、直リンクをhttpsへ修正しといた方が良いでしょう。

http://blue-black.inkhttps://blue-black.inkへ置換するため、次のツールを使いました。

Search Replace DB

フォームへ必要事項を入力するとダウンロードURLが記載されたメールが届きます。

ダウンロード&展開するとフォルダSearch-Replace-DB-masterが作成されます。このフォルダをドキュメントルートへコピーします。
(注)だれでもアクセス出来るためセキュリティー的にまずいです。推測しづらいフォルダ名に変更しておくと良いでしょう。

フォルダの名称を少しだけ変更して、次の場所に置きました。

/Applications/MAMP/htdocs/blue-black.ink/Search-Replace-DB-master-sdreixkd/

 

ブラウザで次のURLへアクセスします。
https://blue-black.ink/Search-Replace-DB-master-sdreixkd

 

データベースの情報はWordPressの設定を参照して自動的に入力されます。

replaceに旧アドレスであるhttp://blue-black.ink、withに新アドレスであるhttps://blue-black.inkを入力します。
「dry run」を押すと、検索が実行されてその結果が表示されますが、置換は行われません。
問題が無ければ「Live run」を押して置換を実行します。

Search-Replace-DB-master-sdreixkd/フォルダはもう不要です。削除しましょう。

以上でデータベースの修正完了です。

 

sudoなしでCertbotを使う

Let’s Encrypt認証局が発行する証明書の有効期限は90日。Certbotで証明書を定期的に更新しなければなりません。でも、Certbotをsudoで実行したら、更新される証明書はrootしか読めなくなるかも。こうならないように、piがsudo無しでCertbotを実行できるようにします。

 

sudoを使わないで証明書を更新してみましょう….。有効期限が残り30日を切らないとCertbotは証明書を更新しないらしいです。

 

そこで–force-renewalオプションを付加して強制的に更新してみます。

sudoなしで更新できました。

 

証明書を自動更新する

Let’s Encryptが発行する証明書の有効期限は90日です。更新を忘れて失効することが無いように、定期的にCertbotを起動させ、自動的に証明書を更新しましょう。

定期的にプログラムを実行させるといえばcronが定番ですが、Macの場合はlaunchdです。

設定ファイルを次の場所に作成します。
~/Library/LaunchAgents/certbot_renew.plist

中身です。
certbot renewというコマンドを毎日4時0分に実行するといった設定です。

 

設定ファイルを登録します。以降、4時0分に証明書更新処理が実施されます。
(期限切れまで30日以上の日数があると更新されません。)

 

以上です。

Leave a Comment

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください