🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

さくらのクラウド

さくらのクラウドは、さくらインターネット株式会社が提供するIaaS型のクラウドサービス。仮想化技術による柔軟性のあるカスタマイズを始め、様々な高機能を備えています。

さくらのVPS

さくらのVPSは、さくらインターネット社が提供するVPS(仮想専用サーバー)です。高速なSSDの選択や複数台構成も可能。利用者に応じた柔軟なプランが用意されています。大規模システムにも対応可能なスケーラビリティを備えたホスティングサービスです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

1501閲覧

cerbotプラグインで自動更新した証明書を、dockerやウェブアクセラレータの証明書に更新を反映するには

darumausagi

総合スコア18

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

さくらのクラウド

さくらのクラウドは、さくらインターネット株式会社が提供するIaaS型のクラウドサービス。仮想化技術による柔軟性のあるカスタマイズを始め、様々な高機能を備えています。

さくらのVPS

さくらのVPSは、さくらインターネット社が提供するVPS(仮想専用サーバー)です。高速なSSDの選択や複数台構成も可能。利用者に応じた柔軟なプランが用意されています。大規模システムにも対応可能なスケーラビリティを備えたホスティングサービスです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2019/10/21 03:23

サイト運営を目標に現在勉強中です。
浅学ゆえの未熟な質問、ご容赦ください。
ご助力いただけますと大変助かります。

前提・実現したいこと

  • cerbotプラグインでLet's Encryptの証明書を自動更新する(DNS-01チャレンジ)。
  • 証明書が更新された際に、下記を自動で実施したい
    • dockerで構成しているウェブサーバに証明書更新を反映
    • ウェブアクセラレータに登録している証明書を最新の証明書に自動更新

<利用サービス>
DNS:Gehirn DNS
サーバ:さくらのVPS
CDN:さくらのウェブアクセラレータ

できなかったこと・困っているところ

cerbotプラグインで証明書を自動更新するところまではできました。

そのため、次は以下を達成したいと考えております。

(1)dockerで構成しているウェブサーバに証明書更新を反映
Let's Encryptの証明書はホスト側で証明書を更新しているので、
docker側で証明書の更新を反映しなければいけないと認識しています。
dockerの証明書は、ホスト側に配置しているディレクトリを以下のようにdockerコンテナに共有していますが、
証明書の更新を即時反映するにはどのようなアプローチをとるのがスマートでしょうか。
浅学で思いつくイメージとして、
cerbotプラグインで証明書更新実行時に単純にdockerコンテナの再起動を実施するコマンドを実行してみたのですが、
コンテナIDが再実行時に変更される関係でログにエラーが出力されて気持ち悪いな…と思ったので、
みなさんはどのようなアプローチをとっていらっしゃるのかな、と…。お手数ですが、ご教授いただきたいです。
他に私が自力で思いつくのは、dockerコンテナを事前に自動起動する設定にしておいた上で、証明書更新時にコンテナの再起動ではなくて停止させる、くらいだったので…。

services: nginx-proxy: image: jwilder/nginx-proxy container_name: nginx-proxy ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/tmp/docker.sock:ro - /etc/nginx/ssl:/etc/nginx/dhparam:ro - /etc/letsencrypt/live/hogehoge.com:/etc/letsencrypt/live/hogehoge.com:ro - /etc/letsencrypt/archive/hogehoge.com:/etc/letsencrypt/archive/hogehoge.com:ro - /etc/certs:/etc/nginx/certs:ro networks: - common_link networks: common_link: external: name: common_link (※ディレクトリパスは一部実際に使用しているものと変更しています)

(2)ウェブアクセラレータに登録している証明書を最新の証明書に自動更新
ウェブアクセラレータでは、証明書が登録できるのですが、
そちらは現在、手動でコピーアンドペーストで貼り付けている状態です。
ここを自動化したいと考えています。
さくらのウェブアクセラレータには、APIで証明書を更新する機能があるようなので、
機能的にはできると思うのですが、方法がよくわかりません。

検索はしてみたものの、証明書の更新と同時に実行するようなものが多く、
私が実行したい、証明書を別で更新した後に、ウェブアクセラレータに登録している証明書を更新するというイメージに
そぐわないものが多かったです。
応用すればできるのかもしれないですが、そこまでの応用力がなく…。
ご教授いただければ幸いです。

以上よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2019/10/21 05:33

ホストからdockerに対してリバースプロキシするのであれば、ホストDocker間はhttpにして、docker側では証明書不用な構成でも良いのでは無いでしょうか。 ちなみに、「単純にdockerコンテナの再起動」はどのように行いました? docker restart を利用すれば、コンテナIDは変わりません。
darumausagi

2019/10/27 12:47

返信が遅くなり大変申し訳ありません。ご回答いただきありがとうございました。・ 諸々の事情で検証の時間が取れず、失礼いたしました…。 ホストとdocker間についてはできればhttpsにしたいというのがあって、docker側で証明書不要の構成はあまり考えておりません。やり方がまずかったのかもしれないですが、当初そのような構成で作成した時に証明書エラーで表示がうまくいかなったのもあり。すみません。 dockerの再起動については、docker restartをしたはずで、それでもエラーが起きたという認識だったのですが、普通にdocker restartをかけたときはご指摘の通りIDは変わらなかったです。 cerbot renew時のdocker restartの検証は不足しているので、原因がなにかはまだわかっていないのですが、docker restartのコマンドをミスしていたのかもしれません。
guest

回答1

0

ベストアンサー

とりあえず、こっちだけ...

(2)ウェブアクセラレータに登録している証明書を最新の証明書に自動更新
さくらのウェブアクセラレータには、APIで証明書を更新する機能があるようなので、機能的にはできると思うのですが、方法がよくわかりません。

APIは、証明書と秘密鍵の情報を更新API ですね。

bash から実行するのであれば、

curl --user "Access Token":"Access Token Secret" \ -X PUT -d '{"Certificate": {"Certificate": "証明書ファイルの中身", "Key": "キーファイル(privkey.pem)の中身"}}' https://secure.sakura.ad.jp/cloud/zone/is1a/api/webaccel/1.0/site/サイトID/certificate

のように curl から実行するのが簡単でしょうか。

Access TokenAccess Token Secret は、APIキー管理 画面から取得します。

サイトID は、対象の「ウェブアクセラレータ」のIDです。(数字12桁)

証明書ファイルの中身 は、現在手動更新している証明書の中身のデータです。( -----BEGIN CERTIFICATE----------END CERTIFICATE----- も含む。)

まずは、curlコマンドをコマンドラインから試してみて、うまく更新できることを確認してみてください。

自動処理するには、curlの引数のjson 形式パラメータに、ファイルの中身を埋め込む必要があるので、ファイルを読み込んでパラメータに埋め込んで整形する簡単なスクリプトを書く必要はあると思います。


APIを curl で直接実行する方法を書いてみましたが、もう少し簡単な方法もあります。

Usacloud で、さくらのクラウドのAPIで可能なことをコマンドラインで操作するツールも公開されています。

Usacloud を使うと

usacloud web-accel cert-update -y --cert /etc/letsencrypt/live/example.com/fullchain.pem --key /etc/letsencrypt/live/example.com/privkey.pem www.example.com

のようにファイルを直接指定して実行できます。詳しい設定などは、ドキュメントを読んで試してみてください。

投稿2019/10/22 02:10

CHERRY

総合スコア25216

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

darumausagi

2019/10/27 12:50

返信が遅くなり大変申し訳ありません。詳細なご回答をいただきありがとうございます。 諸々の事情で検証の時間が取れず、まだ試せていないのですが、 ご回答いただきました内容を参考に、頑張りたいと思います! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問