BLOGTIMES
2016/11/25

dehydrated をつかって Let's Encript の証明書を取得(http-01編)

  Tips ssl  systemmanagemant  letsencrypt  sh  tutorial  qmail 
このエントリーをはてなブックマークに追加

Let's Encrypt は誰でも無料で利用できる SSL 証明書ですが、有効期間が90日しかない*1ので定期的な更新の自動化が欠かせません。

これを行うためのクライアントとしてはオフィシャルな Certbot がありますが、実行に sudo を要求するので、レンタルサーバなどで root 権限を持っていない場合には利用することができません。その他にも Python が必要だったりと使い勝手があまりよくありません。というわけで、sudo がなくても実行できるクライアントを探してみたところシェルスクリプトベースの dehydrated(letsencrypt.sh) を見つけました。

自分のサーバやさくらのレンタルサーバでも以下の手順で動作させることができました。

# ソースコードの取得 git clone https://github.com/lukas2511/dehydrated.git cd dehydrated/ # WELLKNOWN ディレクトリの作成 chmod o+x . mkdir -p wellknown/acme-challenge sed -e 's|#WELLKNOWN=.*|WELLKNOWN="\'`pwd`'/wellknown/acme-challenge"|' < docs/examples/config > config # 証明書のドメイン名を指定 (SANを使う場合には1行に空白で区切ってドメインを列挙) echo "example.com hoge.example.com fuga.example.com" > domains.txt # Apache 用の設定ファイルを追加 cat <<EOS > /etc/httpd/conf.d/acme-challenge.conf Alias /.well-known `pwd`/wellknown <Directory /opt/dehydrated/wellknown> AllowOverride None Require all granted </Directory> EOS # Apache の設定を再読込 systemctl reload httpd # 実際に証明書を取得 ./dehydrated -c --accept-terms # 自動更新用のスクリプトを生成 cat <<EOS > certautorenew #!/bin/bash cd `pwd` ./dehydrated -c EOS chmod 755 certautorenew # cronで一日一回定期更新されるようにする ln -s "`pwd`/certautorenew" /etc/cron.daily

WELLKNOWN ディレクトリの中身のファイルについては HTTPd 経由で外部からアクセスできる必要があります。
これらに問題なくアクセスできれば、 Let's Encript からの証明書が certs/(FQDN) に格納されます。
具体的には

  • cert.pem(証明書)
  • chain.pem(中間証明書)
  • fullchain.pem(証明書+中間証明書)
  • privkey.pem(秘密鍵)

というファイル群ができているはずなので、メールやウェブなどの各種デーモンの設定ファイルから生成された証明書や秘密鍵を使うように設定すればOK。

更新の自動化

証明書の更新は cron などで定期的に dehydrated -c を実行してやるだけですが、例えば更新したあとに httpd を graceful したい場合には以下のような hook.sh スクリプトを作って、config の HOOK に設定してやれば、証明書が更新された時だけサービスを再起動するようなことができます。

service httpd graceful

また、qmail-tls のファイルは以下のような感じで更新できます。

cat /path/to/dehydrated/certs/FQDN/{privkey,fullchain}.pem > /var/qmail/control/clientcert.pem cat /path/to/dehydrated/certs/FQDN/{privkey,fullchain}.pem > /var/qmail/control/servercert.pem

2017/02/05 追記


トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/8962
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン