今はとてもいい時代なので Let's Encrypt が無料でSSL証明書を発行してくれる。というわけで、サイトのHTTPS化を行った。
証明書の発行と nginx.conf の変更
作業自体はとても簡単で、証明書の発行に関する処理はすべて certbot (旧名:letsencrypt)というツールがやってくれる。トップページからサーバとOSを選択すれば、それに応じたinstallationが表示される。どこまで親切なんだ!
ここは CentOS 6 上の Nginx で動いているので、以下それに従う。
certbotの導入は、適当な場所にwgetして実行権限を与えるだけ。
$ wget https://dl.eff.org/certbot-auto
$ chmod a+x certbot-auto
あとはWebサーバのドキュメントルートとドメインを指定してcertbotを実行してあげればよい。
$ /path/to/certbot-auto certonly --webroot -w /var/www/example -d example.com
うちはNginxだけど、Apacheの頃の名残で /var/www/html
をドキュメントルートにしている。/etc/nginx/nginx.conf
は以下のような感じ。
server {
listen 80;
server_name takuti.me;
location / {
root /var/www/html;
index index.html index.htm index.php;
}
# 以下略
なので叩いたコマンドは以下。
$ /path/to/certbot-auto certonly --webroot -w /var/www/html -d takuti.me
途中でメールアドレスなどを聞かれ、無事完了すると Congratulations と言われる。証明書の類は /etc/letsencrypt/live/takuti.me
以下に作成され、ドキュメントルート直下には認証用プラグインのために .well-known
というディレクトリが作成される。
あとは /etc/nginx/nginx.conf
を、
- httpリクエストをすべてhttpsにリダイレクト
- SSLを有効にして証明書のパスを指定
について書き換えればよい。
server {
listen 80;
listen [::]:80;
return 301 https://$host$request_uri;
}
server {
listen 443 default ssl;
server_name takuti.me;
ssl on;
ssl_certificate /etc/letsencrypt/live/takuti.me/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/takuti.me/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location / {
root /var/www/html;
index index.html index.htm index.php;
}
# 以下略
$ service nginx restart
簡単!
HTTPSポート443番の開放
次に、 /etc/sysconfig/iptables
に443番ポートを開ける記述を追加して、
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
iptablesをrestartする。
$ service iptables restart
これでサイトのHTTPS化は完了。
証明書の自動更新の設定
最後に、証明書の自動更新を設定する。証明書の更新は、
$ /path/to/certbot-auto renew
これだけでできるので、このコマンドをcronに登録してあげればよい。ここでは毎月1日午前3時に更新をかけるようにした。
00 03 01 * * /path/to/certbot-auto renew --quiet
これでよし。
おまけ1: 静的サイトジェネレータ Hugo の baseUrl を https:// にする
このサイトのコンテンツはGo製の静的サイトジェネレータ Hugo で生成している。
Hugoはコンテンツ生成時に --baseUrl
オプションを付与すると、HTML中のパスをURLに置換してくれる。たとえば、
$ hugo --baseUrl='http://takuti.me'
と叩いたならば、 /style/style.css
といったパスによるアセットの指定は、URLによる指定 http://takuti.me/style/style.css
に置換された上でサイトコンテンツが生成される。
HTTPS化以降はこの --baseUrl
を https://~ に書き換えなければならない点に注意。
おまけ2: サイトコンテンツのデプロイ時に .well-known を消さないようにする
Hugoで生成したコンテンツは、
$ rsync (中略) --delete {ユーザ}@{ホスト}:{ドキュメントルート}
でサーバに転送しており、転送前にドキュメントルートの中身をすべて削除している。
しかし今、certbotによって作成された .well-known
というディレクトリがドキュメントルート直下にある。これは削除したくない。
なので以後 .well-known
をrsyncの対象から除外することを忘れずに。
$ rsync --exclude ".well-known" (中略) --delete {ユーザ}@{ホスト}:{ドキュメントルート}
そんなこんなでサイトのHTTPS化に成功した。
HTTPS化に対する唯一の懸念事項は http://~ でのはてブ数が残らないことだったけど、これはもう諦めた。仕方あるまい。
シェアする
カテゴリ
あわせて読みたい
- 2021-03-26
- 【コロナ禍でのカナダ移住】渡航の前後1ヶ月間を振り返る
- 2017-04-09
- なぜSparkか
- 2014-03-31
- ブログをWordPressからJekyllに変えた
最終更新日: 2022-01-18
書いた人: たくち
Takuya Kitazawa(たくち)です。長野県出身、カナダ・バンクーバー在住のソフトウェアエンジニア。これまでB2B/B2Cの各領域で、Web技術・データサイエンス・機械学習のプロダクト化および顧客への導入支援・コンサルティング、そして関連分野の啓蒙活動に携わってきました。現在は主に北米(カナダ)、アジア(日本)、アフリカ(マラウイ)の個人および企業を対象にフリーランスとして活動中。詳しい経歴はレジュメ を参照ください。いろいろなまちを走って、時に自然と戯れながら、その時間その場所の「日常」を生きています。ご意見・ご感想およびお仕事のご相談は [email protected] まで。
近況 一杯のコーヒーを贈る免責事項
- Amazonのアソシエイトとして、当サイトは amazon.co.jp 上の適格販売により収入を得ています。
- 当サイトおよび関連するメディア上での発言はすべて私個人の見解であり、所属する(あるいは過去に所属した)組織のいかなる見解を代表するものでもありません。
- 当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、個人ブログという性質上、誤情報や客観性を欠いた意見が入り込んでいることもございます。いかなる場合でも、当サイトおよびリンク先に掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。
- その他、記事の内容や掲載画像などに問題がございましたら、直接メールでご連絡ください。確認の後、対応させていただきます。