ホーム  >   ブログ  >   サイトをHTTPSにした

2017-02-04

サイトをHTTPSにした

  寄付で活動を支援する   一杯のコーヒーを贈る

このエントリーをはてなブックマークに追加

今はとてもいい時代なので 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化以降はこの --baseUrlhttps://~ に書き換えなければならない点に注意。

おまけ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

  書いた人: たくち

たくちです。長野県出身、カナダ・バンクーバー在住のソフトウェアエンジニア。これまでB2B/B2Cの各領域で、Web技術・データサイエンス・機械学習のプロダクト化および顧客への導入支援・コンサルティング、そして関連分野のエバンジェリズムに携わってきました。現在はフリーランスとして活動を続けつつ、アフリカ・マラウイにて1年間の国際ボランティアに従事中。詳しい経歴はレジュメ を参照ください。いろいろなまちを走って、時に自然と戯れながら、その時間その場所の「日常」を生きています。ご意見・ご感想およびお仕事のご相談は [email protected] まで。

  寄付で活動を支援する   一杯のコーヒーを贈る

  免責事項

  • Amazonのアソシエイトとして、当サイトは amazon.co.jp 上の適格販売により収入を得ています。
  • 当サイトおよび関連するメディア上での発言はすべて私個人の見解であり、所属する(あるいは過去に所属した)組織のいかなる見解を代表するものでもありません。
  • 当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、個人ブログという性質上、誤情報や客観性を欠いた意見が入り込んでいることもございます。いかなる場合でも、当サイトおよびリンク先に掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。
  • その他、記事の内容や掲載画像などに問題がございましたら、直接メールでご連絡ください。確認の後、対応させていただきます。