Encryptのサーバー証明書を取得2019-06-13背景ただいまVPSの引っ越し作業中です。引っ越し先は、VPS運営会社のサブドメインなので引っ越し元(www.lemorin.jp)の証明書を使えません。Webサーバーの動作チェックをしたいので臨時の証明書が欲しい。Encryptはツールcertbotを使ってサーバー証明書を取得します。初めに、スーパーユーザーからcertbotを実行するとシステムのWebサーバーに介入、サーバー外からそれと分かる痕跡を残せるようにします。Encryptのサーバーにアクセスしてドメイン名/メールアドレスを申請、痕跡のテキストを取得します。Encryptのサーバーからアクセスさせ、ドメイン名/介入できていることを確認させます。最後に、サーバー証明書を取得してファイルに保存します。一般ユーザーによるMojolicious運用でどうやるかウチのサイトはMojoliciousを一般ユーザーで運用しています。certbotはスーパーユーザーが実行する前提なので相性が悪い。それをよく表しているのがディレクトリ/etc/letsencryptを作ろうとして(一般ユーザーなので)ハネられてしまうトコ。私がWebサーバーへ介入します。certbotを実行スーパーユーザーでcertbotを実行します。証明書取得だけのコマンド、手動オプションを指定してあります。Webサーバーでの準備ができたらキーを押すようにプロンプトが待ちます。この状態のまま、Mojoliciousに介入します。ディレクトリ→/.well-known/acme-challenge/tRYsXFvgspECTvf_imL4c9fNIT4MgKcS0lpOBcwmOF0テキスト→tRYsXFvgspECTvf_imL4c9fNIT4MgKcS0lpOBcwmOF0.ec8AxGgAmNw6eAm4U1WMbg4hoWtNPNyRkOVMiyc5-0IMojoliciousに介入certbotのプロンプト待ちのまま、Mojoliciousに介入したいので、certbotのほうはそのままにします。Termをもう1個起動、Mojoliciousの運用アカウントにログインします。myapp.confの中にディレクトリ名と痕跡のテキストを追加します。"tRYsXFvgspECTvf_imL4c9fNIT4MgKcS0lpOBcwmOF0.ec8AxGgAmNw6eAm4U1WMbg4hoWtNPNyRkOVMiyc5-0I",Mojoliciousにディレクトリを指定されたら痕跡を返すルーターを定義します。場所はlib/Myapp.pmのstartupです。$config->{certbot};修正後、Mojoliciousを再起動、ブラウザでアクセス、痕跡のテキストが表示されるのを確認します。Encryptからアクセスさせて証明書を発行してもらいます。certbotが証明書を保存、無事に終了したら痕跡を消して良いのでルーターを復元しますが、せっかく入れたコードを残したいので設定で無効化します。設定(myapp.conf)を保存したらMojoliciousを再起動して痕跡がないのを確認して完了です。0,証明書の場所ここにありました。certbotは継続して運用するのが目的なので、シンボリックリンクになっていてREADMEにも「コピーするな、リンクしろよ」と書いてあります。ウチの利用は引っ越しの事前チェック用だし、Webサーバーを運用している一般ユーザーだけからアクセスしたいのでコピーしました(おい)。mojolicious。