71
76

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Let's Encryptで無料SSL証明書を取得する

Last updated at Posted at 2018-03-22

目的

  • ステージング環境の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. 以下会話形式に進みます
    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を開けないといけない。一時的でも開けたくない時もある。

  • それを差し置いても、取得、更新がコード化できる所が良いところなのかな。

    自分の技術ブログではフリーランス界隈の情報や最新のIT情報の発信していますので、よろしくお願いします。

71
76
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
71
76

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?