どうも、平島です。SSL証明書って知っていますか?
「あーーあのブラウザで?セキュリティで?なんか鍵マークのやつ?」って思いつく方。その通り正解です。ネットワークの通信路を、悪意ある人や端末や bot からを守ってくれてる技術です。
前回は、太平洋のど真ん中にある「トケラウ」のtkドメインを取得して、サーバに関連付けることができました。これで世界のどこからでも、このサーバにドメイン名でアクセス出来るようになったわけですが、今回はSSL証明書を取得して、このサーバに設置することを目指します。そして今回も、無料でSSL証明書を取得して設置します。
Let’s Encrypt という、無料証明書を発行してくれる機関の certbot というプログラムを用いて自動設置します。とても便利で、心から感謝です。
SSLって深いんです。そして、その仕組みもとても面白いんです。全貌をご説明することは今回分量的に難しいので少量に控えて、また後日で。
AWSのサーバ構築とかSSLとか勉強したい人など、誰かの役にも立てればいいな。
- 1.SSL、はじめに
- 2.Webサーバへ、SSLの機能追加
- 3.Webサーバの設定ファイルへ、ドメイン名の追加
- 4.「certbot」のインストール、の前準備(EPEL)
- 5.「certbot」のインストール
- 6.「certbot」の実行
- 7.「certbot」によって発行された証明書の一覧
- 8.SSL通信が出来るかどうか、確認!
- まとめ
1.SSL、はじめに
SSLは、Secure Socket Layerの略ですが、実はセキュリティ上の懸念から、現在「SSL」と名前の付くセキュリティの仕組み(SSLv3など)はすでに利用されていません。代わりに利用されているのは、TLS(Transport Layer Security)という名前の仕組みです。ただ、SSLの名前は既に広く認知されていますので、最近は SSL/TLS という風に組み合わせて使われています。ただ面倒なので、このサイトではSSLで通します。
さて、Webサーバに、SSLを設置するために必要なものは、以下3点です
1)秘密鍵 …公開鍵暗号方式の片方の鍵ですね。誰にも見られちゃダメです、
2)サーバ証明書 …CAから発行してもらった、サーバ自身の証明書ですね
3)CA証明書(+中間CA証明書) …CAや、中間CAの証明書です
この3つがあれば、Webサーバに登録を行うことで使えるようになります。
また、この3つを使ってSSL通信を担保する方法ってのは、ざっくり、
・サーバが、「サーバ証明書」をクライアントに送り、
・クライアントは、「サーバ証明書」が問題ないか検証を行います
・クライアントは、問題なければ「サーバ証明書」から、サーバの公開鍵を取得します
・クライアントは、「鍵の基」をサーバの公開鍵で暗号化して、サーバに送ります
・サーバは、受け取ったものをサーバの秘密鍵で複合して「鍵の基」を受け取ります
という感じになります。これで「鍵の基」が安全にサーバとクライアントで共有されますので、これ以降の通信は、「鍵の基」から作られた共通鍵とMAC鍵で、暗号化通信を行います。SSL通信の準備、完成です。
へーそうなんだ、、、くらいで理解はOKです。早速、実際のサーバの構築に行きましょう。
2.Webサーバへ、SSLの機能追加
最初の時点では、設置したApacheにSSLを処理する機能自体が備わっていませんので、まずインストールしたく思います。SSLを処理する機能は、mod_sslという名前の、Apacheを機能拡張するモジュールです。ターミナルで接続して、このコマンドを流します。
# yum install -y mod_ssl
3.Webサーバの設定ファイルへ、ドメイン名の追加
次に、Webサーバに設置したドメイン名をちゃんと教えてあげましょう。
Apache のメイン設定ファイル /etc/httpd/conf/httpd.conf を編集します。
# vi /etc/httpd/conf/httpd.conf
そして、「Listen 80」の部分を見つけてその後ろに赤枠部分を追加します。
4.「certbot」のインストール、の前準備(EPEL)
1)次に、Let’s Encryptの証明書設置プログラム「certbot」をインストールしますが、そのための準備を行います。プログラムのインストールを行う参照先に、EPELと呼ばれるリポジトリパッケージを追加します。
# cd /home/ec2-user
# wget -r –no-parent -A ‘epel-release-*.rpm’ http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/
2)終わりましたら、インストールをしましょう。
# rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-*.rpm
3)で、以下のコマンドでEPELを有効にします。
# yum-config-manager –enable epel*
4)その結果、次のコマンドで、EPEL が有効であることを確認できます。
# yum repolist all
5.「certbot」のインストール
EPEL追加して有効化するの、結構長かったですね。。ようやくLet’s Encryptの証明書設置プログラム「certbot」のインストールです。以下のコマンドです!
# yum install -y certbot python2-certbot-apache
6.「certbot」の実行
やっとインストール終わりましたー!早速設定ディレクトリに移動して実行しましょう。どうなるでしょう。順に説明します。
# cd /etc/httpd/conf.d/
# certbot
で、エンター押した後にはこんな感じになります!
7.「certbot」によって発行された証明書の一覧
どのような証明書が発行されたのかを確認してみましょうか。
# cd /etc/letsencrypt/live/lecture-server.tk
# ls -la
・cert.pem …サーバ証明書
・chain.pem …中間CA証明書
・fullchain.pem …ルートCA証明書と中間CA証明書をくっつけたもの
・privkey.pem …秘密鍵
です。自動でここまでやってくれて、、。Let’s Encryptの志、本当に高いよ。。。
設定の再読み込み(この場合、SSL証明書類の読み込み)には、サービスの再起動が必要ですので、念のためやっておきましょう。
# systemctl restart httpd
8.SSL通信が出来るかどうか、確認!
ブラウザでアクセスしてみて確認しましょう!緊張の一瞬。どうでしょう!
成功です。やりましたね!!
まとめ
ということで、今回は「超簡単AWSサーバ構築法 …Let’s Encrypt SSL証明書 設置手順 (授業編)」をご紹介しました。
次回は、サーバによって提供されたSSL証明書を、ブラウザ側から確認をしてみたく思います。いろいろ裏側の動きが分かってくると面白いですよ。
もっと知りたいって方は気軽に何でもお尋ねくださいね。
※なお、わかりやすさを優先するためWebサーバ用のユーザ作成、設定等を省いています。本番のサーバを構築する際には、種々お気を付けください。