MENU

【VPS】SSLサーバー証明書を導入して、サイトの接続をhttps化する

こんにちは。くまごろーです。
この前サーブレットアプリを作成したとき、ついでにSSL証明書の導入にも挑戦したので、そのやり方についてまとめてみます。

 
1 SSLとは?httpsとは?

 SSLとは、正式名称を「 Secure Sockets Layer 」いいます。で、実際どういうものなのかうまく説明できなかったので、わかりやすい説明のサイトを見つけてきました。(-_-)

SSLとは、インターネットなどのIPネットワークでデータを暗号化して送受信するプロトコル(通信手順)の一つ。データを送受信する一対の機器間で通信を暗号化し、中継装置などネットワーク上の他の機器による成りすましやデータの盗み見、改竄などを防ぐことができる。

SSL(Secure Sockets Layer)とは - IT用語辞典 e-Words

 HTTPプロトコルは非暗号化の通信方法で、様々なリスクを孕んでいます。そのため、上記のSSLと組み合わせて通信を暗号化することが一般的になっており、「HTTPSプロトコル」と呼ばれています。(ちなみに、「HTTPS」は「HTTP over SSL」の略)

 
 
2 WebサイトをSSL化するには?
 
通信を暗号化(SSL化)するにはどうすればいいのか?SSL化には、SSL証明書が必要になります。

インターネットに公開するWebサイトをSSL化するには、SSL証明書(正確には「SSL/TLSサーバー証明書」と言います)が必要です。
一般的には、ジオトラストやグローバルサインなどの認証局が発行する有料の証明書を購入してサーバーにインストールします。
しかし無料のSSL証明書発行サービスであるLet’s Encryptの正式サービスが2016年4月に開始されました。
これにより、誰でも無料でSSL証明書を手に入れることができるようになりました。

ネコでもわかる!さくらのVPS講座 ~第六回「無料SSL証明書 Let’s Encryptを導入しよう」 | さくらのナレッジ
 
なんと、SSL証明書は無料で取得することもできるらしい。というわけで、今回は上記の「Let's Encrypt」を利用することにしました。

 
 
3 手順
 
 Let's Encryptを利用する場合、あらかじめドメインを取得しておく必要があるらしい。(IPアドレスは使用できないので)ドメインは「お名前ドットコム」等のサイトで簡単に取得できます。
https://www.onamae.com/

 
(1)Apacheにmod_sslをインストールする。

以下のコマンドでmod_sslを導入する。

# yum install mod_ssl

httpdを再起動してmod_sslを適用。

# systemctl restart httpd

導入されているか確認するには以下のコマンド。

# httpd -M

 
(2)ファイアウォールで「443番ポート(https用)」を開放する。
 
以下のコマンドで、ファイアウォールhttps通信を許可しているか確認。

# firewall-cmd --list-all

httpsが無ければ、ファイアウォールの設定を変更する。
こちらのコマンドでhttpsファイアウォールに追加します。

# firewall-cmd --add-service=https --zone=public --permanent

ファイアウォールを再起動。

# systemctl restart firewalld

 
(3)Let's Encrypt をインストールする
 
以下のコマンドでインストール。

# yum install certbot python2-certbot-apache

インストールできたら、certbotコマンドを実行して、証明書をインストールする。

# certbot --apache -d xxxx.com

※ 「xxxx.com」には自分のドメインを入力。

※ 上記コマンドを実行すると、いくつか質問されるので、それぞれ回答する。
   1つ目:Let's Encryptからの連絡を受け取るためのEmailアドレスを入力する
   2つ目:規約に同意するか(Aを入力)
   3つ目:Let's EncryptパートナーにEmailを公開するか(どちらでも可)
   4つ目:1を選択
   5つ目:http接続を残しておくか、http接続時にhttpsへリダイレクトさせるか(2を選択)

 
全て回答したら、以下のコマンドでhttpdを再起動。

# systemctl restart httpd

 
 
これでhttps接続ができるようになったはずです・・・(=_=)