/ #tech #linux 

Let's Encryptで無料SSL証明書を設置する方法

Let’sEncryptの証明書を使用するサービスも最近だんだんと増えてきましたね。
特にクラウド系のマネジメントサービスで割と採用されてます。
NetlifyのSSL証明書もこれですね。
今回は自分でLet’sEncryptの証明書を設定する方法を紹介します。

やること

  • ステージング環境のGCPのVMインスタンスにSSL証明書を設定してhttps通信します。

取得前に確認すること

  • まずドメイン名を取得していること。
  • そのドメイン名をDNS登録してIPアドレスへ名前解決している事
  • 期限切れ時近くにくるメールの受信用メールアドレスを決める。

Let’s EncryptのクライアントソフトCertbotをインストール

  • 証明書の取得はCertbotというソフトからコマンド操作をする事で取得できるので、まずインストール

    # yum install epel-release
    # yum install certbot python-certbot-apache
    
  • インストールされて使えるかはヘルプ表示で確認

    # certbot -h
    ---------------------
    certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...
    以下省略
    

80,443ポートを証明書の認証確認の為に開放する

  • ステージング、開発環境等のサーバで、外部からのポートが閉じている場合は認証が失敗します。
  • 認証に必要なので、一時的に開ける操作をします。
  • GCPのVMの場合はVMインスタンス→対象のサーバ選択→編集→ファイアウォールHTTP トラフィックを許可するにチェック→HTTPS トラフィックを許可するにチェック→保存 でポートを開けます。
  • ポートを閉じる場合はHTTP、HTTPSトラフィックを許可するにチェックを外す→保存 

証明書取得コマンドを叩く

  • certonly : 証明書のみを取得
  • –webroot : httpdが動いていて、無停止で取得したい場合に指定
  • -w : ルートディレクトリを指定します
  • -d : ドメイン名を指定

    # certbot certonly --webroot -w /home/appuser/public_html/ -d hoge-staging.example.com
    
  • 以下会話形式に進みます

    1. 連絡用のメールアドレスを入力 :
    2. 規約への同意 : Y
    3. メーリングリストへの登録 : N (今回不要だった)
    4. 以上入力するとエラーが起きなければ発行される。

証明書の確認

  • デフォルトで /etc/letsencrypt/live/以下に証明書が保存されます。

    # ll /etc/letsencrypt/live/hoge-staging.example.com/
    total 4
    lrwxrwxrwx 1 root root  58 Mar 22 11:26 cert.pem -> ../../archive/hoge-staging.example.com/cert1.pem
    lrwxrwxrwx 1 root root  59 Mar 22 11:26 chain.pem -> ../../archive/hoge-staging.example.com/chain1.pem
    lrwxrwxrwx 1 root root  63 Mar 22 11:26 fullchain.pem -> ../../archive/hoge-staging.example.com/fullchain1.pem
    lrwxrwxrwx 1 root root  61 Mar 22 11:26 privkey.pem -> ../../archive/hoge-staging.example.com/privkey1.pem
    

Apacheに証明書を設定する

  • httpd 2.4に証明書を設定するには/etc/httpd/conf.d/ssl.confを以下のように編集します

    DocumentRoot "/home/appuser/public_html"
    SSLCertificateFile /etc/letsencrypt/live/hoge-staging.example.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/hoge-staging.example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/hoge-staging.example.com/chain.pem
    
  • httpdを再起動して起動確認

    # service httpd restart
    # service httpd status
    

証明書を更新したい時

  • Let’s Encryptの証明書は有効期限が90日です。
  • 更新はrenewコマンドで行います。更新日の30日前になると更新処理が実行されます。
  • このコマンドをclontabに登録して自動化するなど、更新作業を自動化する事ができます。

    # certbot renew
    

感想

  • 更新の自動化時に当然ポートを外部に開放していないと認証失敗するので、更新時には開放している必要があります。閉じたサーバ等ではなにかしら工夫が必要とおもいます。
  • 認証のために80と443を開けないといけない。一時的でも開けたくない時もある。
  • それを差し置いても、取得、更新がコード化できる所が良いところなのかな。

最後に

このブログではフリーランスになりたい方の為に今後も情報発信を続けていこうと思うのでぜひ応援お願いします。また、Twitterでも日々の為になる技術情報やフリーランスについての有益な情報をつぶやくので、いいなと思ったかたはTwitter 札幌のフリーランス@クラウドランス望月のフォローをお願い致します。

それではみなさん、Let’s Encryptで無料SSL化を使ってみてはどうでしょうーー。