さくらのレンタルサーバ相当のSSL環境をDockerで構築する
要はSSL対応リバースプロキシをNGINXで構築してApacheの手前に置く。 ついでに自己署名証明書を自動発行する。 たまにローカルでもSSL環境が欲しいときがあるので、そういうことをやってみた。 ちなみにApacheのほうはちょうど1年前に構築済みなので割愛。 先に成果物をば ────
というわけで、考えなしに最初に作ったDockerイメージがこれ。 ルート証明書、サーバー証明書、プロキシが全部入りのスペシャルディッシュ。 一見すると簡単便利そうだけど、ビルドするたびにルート証明書が別物になるからNG。 ちょっと考えればわかるだろ(T^T)
ちょっと考えて次に作ったDockerイメージがこれ。 証明書とプロキシを分けてみた。 これで完璧と思うやいなや、サーバー証明書を更新したらルート証明書も別物になることに気づいてNG。 よく考えればわかるだろ(ノД`)
よく考えて最後に作ったDockerイメージがこれ。 ルート証明書だけ独立させた。 逆に滅多なことがない限りサーバー証明書とプロキシはペアなので同居。 今度こそ完璧(`・ω・´)ゞ
- 既存のComposeにプロキシを追加して接続
- 別立てのプロキシを別立てのネットワークで接続
- 別立てのプロキシをホスト迂回で接続
主な実装パターンはお好みで以上の3パターンかな? Win・Macでちょっと使う程度なら3つ目のが一番お手軽だと思う。
完璧だと思ったのにSafariだけ証明書は標準に準拠していません
とかいう意味不明な理由でサーバー証明書がエラー。
検索しても現象そのものは全然ヒットしない。
代わりに気になる記事を見つけた。
- 2020年9月よりAppleがSSL証明書の有効期間を13か月に短縮!詳細や対策とは? - さくらのSSL
- Safari、2020年9月からSSLサーバー証明書の有効期間2年を信頼しなくなる? - JPDirect
なるほど、良かれと思ってサーバー証明書の有効期間を10年にしたのが原因らしい。 有効期間を1年に変更したらエラーは消えた。 ほらね、ルート証明書とサーバー証明書を別居させたのが早くも役に立ったよ(苦笑)