どぼじょのIT学習ブログ

高専卒土木女子がIT業界を目指してお勉強。

【FJORD】NginxでSSL

本日はNginxでSSL接続に挑戦です!

目次

1.これまでのおさらい

1-1. Nginxとは

Nginx(エンジンエックス)とは、htmlを配信するwebサーバーのことでした。
関連記事:Nginxの基本

現在、わたしの場合だとさくらVPSdebianにインストールされています🙂
また、mistyrinth.tkというドメインを取得し、DNSIPアドレスと紐付けています。
関連記事:Nginxを使ってみる

現在はhttp接続(ポート80)に指定しているため、WebページのURLはhttp://mistyrinth.tkhttp://www.mistyrinth.tkです。
それぞれ以下のようなページが表示されるようになっています。
f:id:mistyrinth:20181031152331p:plain

1-2. SSL接続とは

SSLSecure Sockets Layerというプロトコルのことです。
ちなみにプロトコルは、通信をする時の約束事のことでした。
関連記事:HTTPの基本

SSLは公開鍵方式と共通鍵方式を取り入れていて、今メジャーな通信方式と言えると思います。
URLがhttps://で始まるWebページは、SSL接続をしているページですね💡
SSLについては「現在広く使われている安全な接続」という解釈で良いと思います。

1-3. 本日やること

上記を踏まえ、本日やることをもう一度確認します👀
「NginxでSSL接続をする」ということは、現在URLの先頭がhttp://になっているページをSSLに対応させて、URLの先頭をhttps://にするということです!
方法としては、SSL証明書というものを取得します💪
認証局から証明書を取得するのですが、1年契約で何万円もかかるみたいです笑
ですが、Let's Encryptというところは無料で証明書を発行してくれるので、今回はこちらで取得してみます😊
手順はこちらのサイトに載っています。本日はこのページを見ながら進めてみます。

certbot.eff.org

Let's Encryptで証明書を発行するには、certbotというソフトウェアを使います。

2.証明書発行

まず、上記のサイトの手順に従い、進めてみます。
ページの最初に自分の環境を選ぶところがありますが、わたしの場合はNginxDebian9(stretch)を選択しています!
f:id:mistyrinth:20181031135308p:plain

2-1. certbotのインストール

手順に従い、certbotをインストールします。
sudo apt-get install python-certbot-nginx -t stretch-backportsですね👀
f:id:mistyrinth:20181031140322p:plain
アレ…???早速エラーです笑
多分このままうまくいく場合が多いのだと思いますが、エラーになっちゃったので解決します。
エラーにならなかった人は2-2を飛ばしてください😂

2-2. エラーの解消

エラー文はThe value 'stretch-backports' is invalid for APTですね。aptコマンドでstretch-backportsは使えないみたいです。
手順の説明文をよく見てみると、
f:id:mistyrinth:20181031141357p:plain
ありますね。青文字でhereってなっているところ。最初にやっておかないといけないことみたいですね💡
このhereのリンク先はこちらのページです。
sources.listdeb http://ftp.debian.org/debian stretch-backports main を追加するそうです。
f:id:mistyrinth:20181031142524p:plain
保存してsudo apt-get updateで設定反映させたら、certbotインストールのリトライ!
sudo apt-get install python-certbot-nginx -t stretch-backportsです。
これでcertbotのインストールができました🎉🎉

2-3. certbot起動

手順に従い、certbotを起動します。
sudo certbot --nginxです。
f:id:mistyrinth:20181031145333p:plain
メールアドレスを登録して、利用規約に同意します👌

次に、メルマガを希望するか聞かれます。わたしはいらないのでNoにしましたが、どちらでも良いです🙂
f:id:mistyrinth:20181031145540p:plain

続いて、HTTPSの利用をする(つまりSSL通信する)ドメイン名を聞かれます。
わたしはmistyrinth.tkwww.mistyrinth.tkの2つ持っていますが、とりあえずmistyrinth.tkのほう(下記画像中の1番)にしてみます!
f:id:mistyrinth:20181031145819p:plain

今度はHTTPからHTTPSへのリダイレクトをするか聞かれているんでしょうけど、わたしレベルじゃ意味が分からず判断しかねるところです…笑
1のリダイレクトしないほうにしてみたい気持ちもありますが、1を選ぶと設定をいじれなくなってしまうようなので、ひとまず2を選びました。後で設定し直せそうなので🤔

どうやら設定完了のようです!
f:id:mistyrinth:20181031150508p:plain

3.リダイレクトを解除してみる

3-1. 設定ファイルの確認

先程HTTPからHTTPSへリダイレクトをする設定にしたので、ブラウザでhttp://mistyrinth.tkを見ようとすると、https://mistyrinth.tkに飛びます。
f:id:mistyrinth:20181031152729p:plain
安全だし、これはこれで良いのでは?と思いましたが、試しにhttpとhttpsで別のページを表示してみましょう!
VirtualHostの設定ファイルは以下のディレクトリにありましたね。
/etc/nginx/sites-available/[ドメイン名]
参考記事:Nginxを使ってみる (4-2参照)
開いてみると、certbotが設定を書き換えていました。
f:id:mistyrinth:20181031160058p:plain
httpはポート80でしたが、httpsはポート443です。
mistirinth.tklisten 80; が消されて、listen 443 ssl;以降、沢山の設定が追加されています。
これから編集するのは一番下のこの部分です。
f:id:mistyrinth:20181031160831p:plain
細かいところは分からないのですが、おそらくこのままだと、ホストがmistyrinth.tkのときは、301リダイレクトにより永久的にhttps://から始まるページに飛ばされるのでしょうね😳

3-2. HTTPの場合に表示されるページを作成

今はHTTPにアクセスするとHTTPSにリダイレクトされる現状です。
リダイレクトを解除したことが分かるようにするために、HTTPにアクセスした時に表示されるページ(HTML)を作成します。
HTMLの保存場所は/home/demo/public_html/[ドメイン名]/publicでしたね💻
名前をattention.htmlとし、適当にHTMLを書きます。
f:id:mistyrinth:20181031163242p:plain

3-3. 設定ファイルの編集

3-1で確認した設定ファイルを書き換え、HTTPにアクセスした時に先程作ったページが表示されるようにします。
HTTPSへのリダイレクトを設定している最初の3行は、せっかくcertbotが書いてくれたものを消すのももったいないので、コメントアウトにしておきます😌
f:id:mistyrinth:20181031163603p:plain
どうやらこれだけではリダイレクトが解除されない様子🤔
先程作ったHTTP用のページを表示させたいので、とりあえずlocationにHTMLの保存場所を追加します。
最後の1行もいらなそうなのでコメントアウト🙃
参考記事(再掲):Nginxを使ってみる (4-2参照)
 f:id:mistyrinth:20181031170413p:plain
書き終わったらsudo service nginx stopsudo service nginx startでNginxを再起動します。

3-4. ページの確認

chromeでそれぞれのページを確認してみます。
f:id:mistyrinth:20181031170626p:plain
HTTPとHTTPSで表示が違いますね!HTTPのほうはなぜかURLの最後に謎のピリオドが付いています笑
もしかしたら、chrome側でHTTPをHTTPSにリダイレクトさせているのかもしれないです。
safariのほうが分かりやすいですね。URLの隣に鍵マークがついているほうがHTTPSです。
f:id:mistyrinth:20181031171308p:plain

本日はここまでです🙂