【FJORD】NginxでSSL
本日はNginxでSSL接続に挑戦です!
目次
1.これまでのおさらい
1-1. Nginxとは
Nginx(エンジンエックス)とは、htmlを配信するwebサーバーのことでした。
関連記事:Nginxの基本
現在、わたしの場合だとさくらVPSのdebianにインストールされています🙂
また、mistyrinth.tk
というドメインを取得し、DNSでIPアドレスと紐付けています。
関連記事:Nginxを使ってみる
現在はhttp接続(ポート80)に指定しているため、WebページのURLはhttp://mistyrinth.tk
とhttp://www.mistyrinth.tk
です。
それぞれ以下のようなページが表示されるようになっています。
1-2. SSL接続とは
SSLはSecure Sockets Layer
というプロトコルのことです。
ちなみにプロトコルは、通信をする時の約束事のことでした。
関連記事:HTTPの基本
SSLは公開鍵方式と共通鍵方式を取り入れていて、今メジャーな通信方式と言えると思います。
URLがhttps://
で始まるWebページは、SSL接続をしているページですね💡
SSLについては「現在広く使われている安全な接続」という解釈で良いと思います。
1-3. 本日やること
上記を踏まえ、本日やることをもう一度確認します👀
「NginxでSSL接続をする」ということは、現在URLの先頭がhttp://
になっているページをSSLに対応させて、URLの先頭をhttps://
にするということです!
方法としては、SSL証明書というものを取得します💪
認証局から証明書を取得するのですが、1年契約で何万円もかかるみたいです笑
ですが、Let's Encryptというところは無料で証明書を発行してくれるので、今回はこちらで取得してみます😊
手順はこちらのサイトに載っています。本日はこのページを見ながら進めてみます。
Let's Encryptで証明書を発行するには、certbotというソフトウェアを使います。
2.証明書発行
まず、上記のサイトの手順に従い、進めてみます。
ページの最初に自分の環境を選ぶところがありますが、わたしの場合はNginx
とDebian9(stretch)
を選択しています!
2-1. certbotのインストール
手順に従い、certbotをインストールします。
sudo apt-get install python-certbot-nginx -t stretch-backports
ですね👀
アレ…???早速エラーです笑
多分このままうまくいく場合が多いのだと思いますが、エラーになっちゃったので解決します。
エラーにならなかった人は2-2を飛ばしてください😂
2-2. エラーの解消
エラー文はThe value 'stretch-backports' is invalid for APT
ですね。apt
コマンドでstretch-backports
は使えないみたいです。
手順の説明文をよく見てみると、
ありますね。青文字でhere
ってなっているところ。最初にやっておかないといけないことみたいですね💡
このhere
のリンク先はこちらのページです。
sources.list
にdeb http://ftp.debian.org/debian stretch-backports main
を追加するそうです。
保存してsudo apt-get update
で設定反映させたら、certbotインストールのリトライ!
sudo apt-get install python-certbot-nginx -t stretch-backports
です。
これでcertbotのインストールができました🎉🎉
2-3. certbot起動
手順に従い、certbotを起動します。
sudo certbot --nginx
です。
メールアドレスを登録して、利用規約に同意します👌
次に、メルマガを希望するか聞かれます。わたしはいらないのでNoにしましたが、どちらでも良いです🙂
続いて、HTTPSの利用をする(つまりSSL通信する)ドメイン名を聞かれます。
わたしはmistyrinth.tk
とwww.mistyrinth.tk
の2つ持っていますが、とりあえずmistyrinth.tk
のほう(下記画像中の1番)にしてみます!
今度はHTTPからHTTPSへのリダイレクトをするか聞かれているんでしょうけど、わたしレベルじゃ意味が分からず判断しかねるところです…笑
1
のリダイレクトしないほうにしてみたい気持ちもありますが、1
を選ぶと設定をいじれなくなってしまうようなので、ひとまず2
を選びました。後で設定し直せそうなので🤔
どうやら設定完了のようです!
3.リダイレクトを解除してみる
3-1. 設定ファイルの確認
先程HTTPからHTTPSへリダイレクトをする設定にしたので、ブラウザでhttp://mistyrinth.tk
を見ようとすると、https://mistyrinth.tk
に飛びます。
安全だし、これはこれで良いのでは?と思いましたが、試しにhttpとhttpsで別のページを表示してみましょう!
VirtualHostの設定ファイルは以下のディレクトリにありましたね。
/etc/nginx/sites-available/[ドメイン名]
参考記事:Nginxを使ってみる (4-2参照)
開いてみると、certbotが設定を書き換えていました。
httpはポート80でしたが、httpsはポート443です。
mistirinth.tk
のlisten 80;
が消されて、listen 443 ssl;
以降、沢山の設定が追加されています。
これから編集するのは一番下のこの部分です。
細かいところは分からないのですが、おそらくこのままだと、ホストがmistyrinth.tk
のときは、301リダイレクトにより永久的にhttps://
から始まるページに飛ばされるのでしょうね😳
3-2. HTTPの場合に表示されるページを作成
今はHTTPにアクセスするとHTTPSにリダイレクトされる現状です。
リダイレクトを解除したことが分かるようにするために、HTTPにアクセスした時に表示されるページ(HTML)を作成します。
HTMLの保存場所は/home/demo/public_html/[ドメイン名]/public
でしたね💻
名前をattention.html
とし、適当にHTMLを書きます。
3-3. 設定ファイルの編集
3-1で確認した設定ファイルを書き換え、HTTPにアクセスした時に先程作ったページが表示されるようにします。
HTTPSへのリダイレクトを設定している最初の3行は、せっかくcertbotが書いてくれたものを消すのももったいないので、コメントアウトにしておきます😌
どうやらこれだけではリダイレクトが解除されない様子🤔
先程作ったHTTP用のページを表示させたいので、とりあえずlocation
にHTMLの保存場所を追加します。
最後の1行もいらなそうなのでコメントアウト🙃
参考記事(再掲):Nginxを使ってみる (4-2参照)
書き終わったらsudo service nginx stop
とsudo service nginx start
でNginxを再起動します。
3-4. ページの確認
chromeでそれぞれのページを確認してみます。
HTTPとHTTPSで表示が違いますね!HTTPのほうはなぜかURLの最後に謎のピリオドが付いています笑
もしかしたら、chrome側でHTTPをHTTPSにリダイレクトさせているのかもしれないです。
safariのほうが分かりやすいですね。URLの隣に鍵マークがついているほうがHTTPSです。
本日はここまでです🙂