[無料SSL入門]httpからhttpsに設定する方法
皆さんはSSL導入というとどういったイメージが沸きますでしょうか。経験者であれば、レンタルしているサーバ内でCSRと呼ばれる申請書を作成し、その申請書をSSL/TLS業者へわたした後、業者からCRTと呼ばれる証明書と中間証明書が貼付けられたメールを受信する、という流れを経験したかもしれません。
今回は、業者を使わずにサーバ内だけで完結する、無料で使えるSSL/TLSの実装方法を説明いたします。
関連記事
SSL/TLSの事前準備と知識
SSL/TLSを使うことで、ホームページのURLに含まれるスキーマ(httpやhttpsなど)をセキュアに保つことが出来ます。閲覧者からの信頼も大幅にアップしますので、カート機能を持つショップ系のサイトや、お問い合わせが重要な位置を占めるサービスを運用している方は、今後は必須となりますので、この記事で具体的な実装方法を試してみてください。
まず前提となる知識ですが、以下のような専門用語が出てきます。すべて覚える必要はありませんが、いくつかは良く出てくる単語です。
- ターミナル
- コマンド
- Linuxコマンドと呼ばれる専用のコマンド
- macOSのターミナルで入力するコマンドも同種類
- SSL/TLS
- 証明書。SSLという呼び方は古く、現在ではTLSが主流
- 歴史的経緯からSSLという名前が残っている
- 詳しくはこちらの記事を参照
- CSR
- 申請書
- SSL導入したいサーバ内で作成しておく
- CRT
- 証明書
- そのサーバがセキュアであることが保証されるための証明書
- Let’s Encrypt
- 今回使用する無償のSSL/TLS
- 「Let’s Encrypt クライアント」から「Certbot クライアント」に名称変更された
- httpd
- ApacheやNginxなどの、Webアクセスを担当するデーモン
- ドキュメントルート
- SSL/TLSを適用したいサイトの一番トップに表示される場所
/var/www/html
など
予め、SSL/TLS対応したいサーバへの接続情報などは用意しておいてください。今回はサーバのOSがCentOS7、httpデーモンはNginxという前提で進めていきます。
具体的な手順としては、以下のような流れで作業を進めます。
- ターミナルでサーバに接続
- rootユーザにスイッチ
- certbotのインストール
- certbotで証明書作成
- httpd側の設定ファイルに証明書などのパスを記述して再起動
サーバへログイン
まずはサーバへログインします。ログインすると以下のような情報が画面に表示されます(「user」や時刻部分は環境によって変わってきますのでこの通りではないはずです)。
Last login: Mon Aug 6 11:55:42 2018 from 123.45.67.189 [user1@localhost ~]$
rootユーザになりましょう。rootになるためにはrootのパスワードが必要ですが、一般ユーザがすでにrootになれる権限があれば、sudo
コマンドでもOKです。
Last login: Mon Aug 6 11:55:42 2018 from 123.45.67.189 [user1@localhost ~]$ sudo -s
以降、プロンプトが「$」から「#」変わります。
[root@localhost ~]#
certbotをインストールします。
[root@localhost ~]# yum install certbot
Let's Encrypt!
それでは早速証明書をインストールしてみましょう。その際、ドキュメントルートとドメイン名を指定する必要がありますので、予め調べておいてください。
certbotコマンドで証明書を発行します。
[root@localhost ~]# certbot certonly --webroot -w <ドキュメントルート> -d ドメイン名
次はメールアドレスを入力する必要があります。受信可能なメールを登録しましょう。
[root@localhost ~]# Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel):
次は、利用規約に同意するために、Aをタイプします。
:A
非営利団体EFFからのメールを受け取るかどうか聞かれるので返答します。特に問題がなければYでOKです。
:Y
これで証明書のインストールが完了しました。
httpデーモンの設定
certbotコマンドで、証明書や鍵ファイルがインストールされました。
それぞれ以下の場所にシンボリックリンクが貼られます。
- サーバ証明書(公開鍵)
/etc/letsencrypt/live/<ドメイン名>/cert.pem
- 中間証明書
/etc/letsencrypt/live/<ドメイン名>/chain.pem
- サーバ証明書+中間証明書
/etc/letsencrypt/live/<ドメイン名>/fullchain.pem
- nginxだと
ssl_certificate
に指定
- 秘密鍵
/etc/letsencrypt/live/<ドメイン名>/privkey.pem
- nginxだと
ssl_certificate_key
に指定
早速Nginxの設定ファイルを以下のように編集してみましょう。
server { listen 443; ssl on; ssl_certificate /etc/letsencrypt/live/<ドメイン名>/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/<ドメイン名>/privkey.pem; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; ・ ・ ・ }
listen 80;
の設定をまるごとコピーし、改めてlisten 443;
の設定として記述するのがよいでしょう。
この状態でNginxを再読込し、ブラウザで確認してみましょう。
最後に
今回使用したLet’s Encryptですが、試用期間は半年です。半年後には更新作業を行わなければなりません。
事前に登録したメールに通知が行くはずですので対応が漏れることは無いとは思いますが、次回は自動更新のための処理なんかを説明してみたいと思います。