PR

ZeroSSL or LetsEncrypt

FreeBSD
記事内に広告が含まれています。

やられた 🙁 🙁

以前からナンチャッテ証明書を使ってメールや imap を動かしていたのですが、ある日ある時 iPhone の OS をアップデートした時からナンチャッテ証明書ではうんともすんとも言わなくなってしまい、正規の証明書を使用する必要性を感じた時に、安価な証明書をネットで調べると LetsEncrypt か ZeroSSL である!という情報をつかむことができました。無料であればどちらの証明書でもよかったので、それぞれのサイトのトップページと世間様の評価のページもいくつか読んでみて、より簡単そうな ZeroSSL を使ってみ始めました。WEBページで証明書を作成して、作成した証明書をダウンロードして使うのはとっても簡単でいいなと思った記憶があります。90日たって更新もWEBサイトで数クリックで完了し、同じようにダウンロードして置き換えることで簡単に動きました。今回もサイトから証明書の有効期限が迫ってる旨のメールが届いたので以前書き留めておいた手順に従って更新しようとすると、10$/月の Basic オプションが選択されており、”んっ?いらんオプションを有効にしてしまったか?”と見直したのですが依然として無料オプションは使用できませんでした。明日までに置き換えないといけないのになぁ。。。と思いながらよく画面を見てみると、無料で使える回数の上限に達しましたと書かれていることに気づきました。やられた 🙁 🙁 よくよく調べてみると無料で使える回数は3回までということになっているようで、”しゃーないなぁ。。。”とクレジットカードに手をかけたのですが、無性に腹が立ってきたのでこの際 ”LetsEncrypt に置き換えてやるーーー!”と作業を開始した次第です。このページでは LetsEncrypt 証明書を FreeBSD の sendmail と imap で使用できるようになるまでをメモとして書いてみました。ご参考まで!

まずは、必要なコマンドを make してインストールします。

こんな感じで終了していれば大丈夫と思います。

少し戻ってメッセージを確認します。すると、週単位の管理タスクを動かしてね!と書かれているので、必要な設定を追加します。

/etc/periodic.conf ファイルに必要な変数を追加して、その変数を参照する管理タスクのファイルが存在することを確認します。

これで準備は完了したはずなので、証明書を取得してみましょう。そのためにはまずマニュアルを読みます。昔若い頃にアメリカに長期出張していた時に、不明な点を周りの人に尋ねるとその答えは殆どの場合 “RTM” と3文字のみのメールで返ってみました。えっ?何言ってるかわからない?RTM とは Read The Manual の頭文字です 🙂 とにかく、読め。。。ということです 🙂 そりゃそうですよね。。ソフトウェアやハードウェアを作った人はこういう輩のために使い方の全てを書き記しているはずなので、それらを読まないほうがおかしいわけですね。ということで、man certbot とキーボードを叩いて、どうすりゃいいのよ。。ということを調べます。

読んでゆくと、WEBサイトの証明書の作成/更新と設定の自動化がメインのツールということがわかります。必要なのはメール関係で使用する証明書だけなので、こんなもんだろう。。。というオプションを付けて実行します。足りない情報は実行中に聞いてくるはずです。

マニュアルにはこのオプションに関する記述もありましたが、指定せずに実行してみました。このサーバーでは WEB のサービスは提供していません。従って、ローカルのHTTPサービスを一時的に起動してサイトからの要求に答えられるようにするオプションを選びました。

次にゆく前に考えます。インターネットのサイトから家庭内ネットワークにあるサーバーに HTTP プロトコルで、指定したファイルを HTTP GET しようとします。IPv4 であれ IPv6 であれ通常はファイアウォールがブロックします。ご家庭の場合はブロードバンドルーターにこの機能があります。サイトでは証明書を使用しようとしているサーバーがコマンドを実行している人の管理下にあることを確認する必要があり、そのためには外部からの HTTP リクエストがサーバーに到達できるようにファイアウォールを一時的に適切に設定する必要があります。

証明書作成のためのユーザ登録をするためには、サービスの内容を理解したということを示さなければなりません。

管理者のメールアドレスはコミュニティーでシェアされます。まぁ、読むもん読んでそれでもわからんことがあればコミュニティに聞かないといけないので問題はありません。

以上で証明書ファイルが作成され、所定のディレクトリに保存されました。メッセージには今回作成した証明書の有効期限と次に何をしないといけないのか、そして、ダウンロードされたファイルのディレクトリ構造やファイル名を変えるな!と書かれています。適当に変えると動かなくなるようです 🙂

メッセージには /usr/local/etc/letsencrypt/live にある証明書ファイルを使えと書かれています。見てみると、このディレクトリにはファイルではなく本当の証明書ファイルへのシンボリックリンクが格納されています。このディレクトリにあるファイルを、証明書を必要としているアプリケーション側で使用していると、証明書を更新した時にアプリケーション側での変更は必要なく、証明書ファイルの再読み込みだけで大丈夫ということのようです。

実際のファイルは archive ディレクトリに保存されて、ファイル名に付いている番号は証明書のシリアル番号の意味で、更新時には live ディレクトリのシンボリックリンクが xxx1.pem から xxx2.pem に作り直されると思われます。まず、README ファイルを確認します。証明書ファイルとして fullchain.pem を使えとありますが、最初に sendmail を設定した時にもチェインの部分は削除しましたので、cert.pem ファイルを使用します。ちょっとしたテストでわかると思いますが、cert.pem と chain.pem を1つのファイルに cat してできたファイルと fullchain.pem を diff してみると全く同じになります。

証明書は既に手元にあるので、sendmail や imap で使えるようにしましょう。オリジナルのナンチャッテ証明書に始まり、 ZeroSSL 証明書に変えた後何度か更新し、今回 LetsEncrypt へ変更しますので、直前に使用したファイルが .org として存在しています。org ファイルは既に有効期限が切れていますし、使用中の証明書ファイルも明日期限切れになります 🙂

何はともあれ問題が起きたときに元に戻せるようにディレクトリ全体をバックアップしておきます。まずは自分しか覗けないディレクトリを作ります。

バックアップツールはお好みのものをお使いいただければ OK ですが、私は tar を使いました。

そして、ディレクトリ内で現在使用中のファイルを .org ファイルに名前を変えます。

さらに、本当の証明書ファイルへのシンボリックリンクを指すようにシンボリックリンクを作ります。

imap は cyrus ユーザが読み込みますので、別ファイルにコピーしてオーナーを変えておきます。

これで準備完了仕上げを御覧じろ!ということで sendmail と imap を再起動します。

ログを確認すると sendmail は問題なく動いたのですが、imap はご機嫌斜めのようです 🙁 証明書ファイルが読み込めないようです。

色々調べてゆくと、証明書ファイルを格納しているディレクトリが root しか見えないようになっていることを見つけました。このディレクトリの所有者情報とモードを変えることも考えたのですが、とりあえずは README にかかれていた内容に従って変更せずにおき、sendmail や imap で使用する証明書ファイルを、シンボリックリンクではなく、コピーしてくることで一通り動くようにできました。

この期に及んでコピーするとは全くスマートではありませんが、明日までに、実際には既に今日中に動かす必要がありましたので、このような暴挙に及んでしまいました。動きをもう少し確認して、letsencrypt のディレクトリの所有者情報をいじって、/etc/mail/certs 内にはコピーではなくシンボリックリンクを作成する方法が一番スマートと思いますので、次回更新の90日後までに確認/修正したいと思います 🙂

コメント