株式会社 科学技術研究所
ホーム > かぎけんブログ > 備忘録 > Lets Encryptで証明書を取得する
Lets Encryptで証明書を取得する
投稿日:2017/04/19
カテゴリ:備忘録

Lets Encryptを利用して無料のSSL証明書を取得しWebサーバ(Apache/Nginx)に適用してみます。
環境は以下のバージョンを使用しました。


    OS: Ubuntu 16.04
    Apache: 2.4.18
    Nginx: 1.10
  

 

1. Lets Encryptのインストール
インストールには、
・Gitリポジトリをクローンする方法
・パッケージでインストールする方法
の二通りありますが、Gitリポジトリをクローンしてインストールします。
公式で推奨しているのはパッケージよりインストールする方法のようです。

Git Cloneで必要なファイルを取得します(保存先は/etc/以下にしました)。
次に、cert-botスクリプトを実行し、テストを行います。


    $ cd /etc/
    $ git clone https://github.com/certbot/certbot
    $ cd /etc/certbot
    $ ./certbot-auto
  

正常にテストが終了すると、以下の文字が表示されます。
ここではNOを選択します。


    No names were found in your configuration files.
    You should specify ServerNames in your config files in order to allow for accurate installation of your certificate.
    If you do use the default vhost, you may specify the name manually.
    Would you like to continue?
  

 

2. 証明書の取得
実際に証明書の取得をしてみます。
証明書を取得したいドメインは事前に名前解決できる状態にしておきます。
Webサーバーが動作していると、証明書の取得が出来ないため、一時的に停止させます。


    $ sudo /etc/init.d/apache2 stop
    $ sudo /etc/init.d/nginx stop
  

また、80番と443番ポートを開いておく必要があります。


    $ sudo ufw allow http
    $ sudo ufw allow https
  

取得の際に、ドキュメントルートや連絡先、ドメイン名をしています。
今回は以下の値を用います。
・ドメイン:test.kagiken.co.jp
・連絡先:test@kagiken.co.jp
・ドキュメントルート:/var/www/

certbot-autoコマンドで取得します。


    $ cd /etc/certbot
    $ ./certbot-auto certonly --webroot -m test@kagiken.co.jp\
      -w /var/www/ -d test.kagiken.co.jp --agree-tos
  

Congratulations!と表示されれば正常に取得できています。

 

3. Webサーバーに設定する
取得した証明書をWebサーバーに適用します。
証明書は/etc/letsencrypt/live/test.kagiken.co.jp/にあります。

Apacheの場合


    SSLEngine on
    SSLCertificateFile  /etc/letsencrypt/live/test.kagiken.co.jp/cert.pem
    SSLCertificateKeyFile   /etc/letsencrypt/live/test.kagiken.co.jp/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/test.kagiken.co.jp/chain.pem
  

Nginxの場合


    listen 443 default ssl;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/test.kagiken.co.jp/cert.pem;
    ssl_certificate_key /etc/letsencrypt/live/test.kagiken.co.jp/privkey.pem;
  

Webサーバーを起動後、ブラウザでアクセスし、証明書を確認します。

証明書の更新には以下のコマンドを利用します。


    $ cd /etc/certbot
    $ ./certbot-auto renew --force-renew
  

 

4. 自動更新する
Lets Encryptで生成した証明書は90日で期限が切れていまいます。
その都度、生成するのは面倒なので、Cronで1ヶ月おきに再生成するようにします。


    $ sudo crontab -e


    # 毎月1日1時22分に更新し、Webサーバーを再起動します。
    # /var/log/renew.logに更新ログを残すようにします。
    # 以下を追記
    22 1 1 * * /etc/certbot/certbot-auto renew --force-renew >> /var/log/renew.log
    33 1 1 * * /etc/init.d/apache2 restart
    33 1 1 * * /etc/init.d/nginx restart

  

以上で、自動更新が出来ました。

 

参考
https://letsencrypt.jp/