目的
- ステージング環境の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
- 以下会話形式に進みます
- 連絡用のメールアドレスを入力 :
- 規約への同意 : Y
- メーリングリストへの登録 : N (今回不要だった)
- 以上入力するとエラーが起きなければ発行される。
証明書の確認
- デフォルトで /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情報の発信していますので、よろしくお願いします。