今回紹介するのは kusanagi ssl コマンドです。
kusanagi ssl コマンドは KUSANAGI の SSL の設定をコマンドラインから操作するコマンドです。
SSL の設定は Web サイトにはとても重要なことですが、煩雑な内容が多く、1つの設定ミスがサイト全体にとって致命的なことになりうる重要な設定です。
その設定をコマンドラインで簡単に設定できるのが kusanagi ssl コマンドです。
それでは kusanagi ssl コマンドでできることを一つずつ見ていきましょう。
Let’s Encrypt の SSL 証明書発行
対象のサーバにまだ SSL 証明書が発行されていない場合に、以下のコマンドを実行することで Let’s Encrypt (※) から自動かつ無料で証明書を発行して設置されます。
なお、発行には有効なメールアドレスが必要です。
※Let’s Encrypt とは、公共の利益のために運営されている、フリーで自動化されたオープンな認証局 (certificate authority; CA) です(公式HPより)
# kusanagi ssl --email saya@example.com kusanagi_html
--email
オプションに有効なメールアドレスを指定し、最後に対象とするプロファイル名を指定します。
これで、 対象のプロファイルに対して Let’s Encrypt から SSL 証明書が発行および設置され、 Web サーバの設定も変更されます。
下記の「Let’s Encrypt の SSL 証明書の自動更新設定」も同時に行われます。
Let’s Encrypt の SSL 証明書の自動更新設定
注意:最初に説明した「Let’s Encrypt の SSL 証明書発行」により Let’s Encrypt の SSL 証明書を取得・設定した場合は、自動的に自動更新が有効になっていますので、改めて自動更新を有効にする必要はありません。
Let’s Encrypt で取得した SSL 証明書の自動更新を有効にしたい場合は、以下のコマンドを実行します。
# kusanagi ssl --auto on kusanagi_html
--auto
オプションには on
を指定し、最後に対象とするプロファイル名を指定します。
これで、Web サーバの設定が変更され Let’s Encrypt の SSL 証明書自動更新が有効になります。
反対に、 Let’s Encrypt で取得した SSL 証明書の自動更新を無効にしたい場合は、以下のコマンドを実行します。
# kusanagi ssl --auto off kusanagi_html
--auto
オプションには off
を指定し、最後に対象とするプロファイル名を指定します。
これで、Web サーバの設定が変更され Let’s Encrypt の SSL 証明書自動更新が無効になります。
任意の SSL 証明書の設置
対象のサーバの SSL 証明書を任意の認証局から取得したい場合は、証明書を取得後に以下のコマンドを実行することで自動的に設置されます。
取得した証明書ファイルと鍵ファイルはあらかじめサーバーに置いておく必要があります。
# kusanagi ssl --cert combined.crt --key servername.key kusanagi_html
--cert
オプションに証明書ファイルのパス、 --key
オプションに鍵ファイルのパスを指定し、最後に対象とするプロファイル名を指定します。
これにより、対象のプロファイルに対して指定のファイルを適切な場所に設置し、Web サーバの設定も変更されます。
なお、この --cert
オプションと --key
オプションは必ず同時指定する必要があります。
先ほどの --email
オプションと同時使用はできません。
HTTP から HTTPS へのリダイレクト設定
対象のサイトに http:// でサイトにアクセスした場合に https:// に 301 リダイレクト(※)させたい場合には以下のコマンドを実行することでリダイレクト設定がされます。
※301 リダイレクトとは Moved Permanently ということで、恒久的な移動という意味になります。
参考:301 Moved Permanently – HTTP | MDN
# kusanagi ssl --https redirect kusanagi_html
--https
オプションには redirect
を指定し、最後に対象とするプロファイル名を指定します。
これで、Web サーバの設定が変更され 301 リダイレクトが有効になります。
反対に、現在 http:// でサイトにアクセスした場合に https:// にリダイレクトさせていて、リダイレクトをさせたくない場合は以下のコマンドを実行することでリダイレクトの設定が削除されます。
# kusanagi ssl --https noredirect kusanagi_html
--https
オプションには noredirect
を指定し、最後に対象とするプロファイル名を指定します。
これで、Web サーバの設定が変更され 301 リダイレクトが無効になります。
HSTS (HTTP Strict Transport Security) の設定
まず、 HSTS とは HTTP Strict Transport Security の頭文字を取った言葉で、その内容を以下に簡単に説明します。
先ほどの http:// から https:// のリダイレクトには問題があり、一瞬ですが http:// でアクセスすることです。
それを悪意ある人間により利用され、本来リダイレクトされるべきサイトではなく悪意のあるサイトへ誘導される可能性があります。
それを防ぐために、 HSTS ヘッダーを設定することにより既に一度でも対象のサイトで https:// でアクセスしていたのなら、リダイレクトせずにブラウザが判断して自動的に https:// でアクセスするように変更されます。
さらに、初回から http:// でアクセスしても https:// でアクセスする仕組みとして HSTS プリロードという仕組みがあります。
HSTS プリロードとは、 HSTS プリロードリスト登録サイトに対象のサイトのドメインを登録することで、初回に http:// でアクセスしてもブラウザが判断して自動的に https:// でアクセスされるようになります。
参考:Strict-Transport-Security – HTTP | MDN
対象のサイトに HSTS の設定を有効にしたい場合は、以下のコマンドを実行することで HSTS が有効になります。
# kusanagi ssl --hsts on kusanagi_html
--hsts
オプションには on
を指定し、最後に対象とするプロファイル名を指定します。
これで、Web サーバの設定が変更され HSTS が有効になります。
HSTS を有効にしたら HSTS Preload リスト登録サイトに対象サイトのドメインを登録することを強く推奨します。
反対に、対象のサイトに HSTS の設定を無効にしたい場合は、以下のコマンドを実行することで HSTS が無効になります。
# kusanagi ssl --hsts off kusanagi_html
--hsts
オプションには off
を指定し、最後に対象とするプロファイル名を指定します。
これで、Web サーバの設定が変更され HSTS が無効になります。
SSL 証明書の透明性オプションの設定
まず、 SSL 証明書の透明性とは Certificate Transparency と呼ばれ、サーバー証明書の発行状況を監視・監査するための仕組みです。
認証局が発行するサーバー証明書の情報を公開ログサーバー(Certificate logs)に登録することで、インターネットユーザーであれば誰でも確認できる状態になり、認証局やドメイン名の登録者が意図しないサーバー証明書発行の事故・トラブルを早期発見することができます。
参考:Certificate Transparencyについて | JPRS
対象のサイトに SSL 証明書の透明性オプションの設定を有効にしたい場合は、以下のコマンドを実行することで SSL 証明書の透明性オプションが有効になります。
なお、事前に有効な SSL 証明書が設定されていることが必要です。
# kusanagi ssl --ct on kusanagi_html
--ct
オプションには on
を指定し、最後に対象とするプロファイル名を指定します。
これで、Web サーバの設定が変更され SSL 証明書の透明性オプションの設定が有効になります。
その際、 SCT (※)を生成およびログサーバへの登録も行われます。
※SCT: Signed Certificate Timestamp(サーバー証明書のデータが格納されたことを保証するタイムスタンプ情報)
もし、SCT の生成をおよびログサーバへの登録を行わず、Web サーバの設定のみを変更したい場合は以下のコマンドを実行します。
# kusanagi ssl --ct on --no-register kusanagi_html
--no-register
オプションは --noregister
でも可能です。
なお、 --no-register
オプションは --ct
オプションでのみ利用可能です。
これで、Web サーバの設定が変更され SSL 証明書の透明性オプションの設定が有効になり、SCT の生成およびログサーバへの登録は行われません。
反対に、 SSL 証明書の透明性オプションを無効にしたい場合は、以下のコマンドを実行します。
# kusanagi ssl --ct off kusanagi_html
--ct
オプションには off
を指定し、最後に対象とするプロファイル名を指定します。
これで、Web サーバの設定が変更され SSL 証明書の透明性オプションの設定が無効になります。
kusanagi ssl コマンドでできることは以上になります。
HSTS や SSL 証明書の透明性など SSL 証明書だけではない、サイトの安全性を高める仕組みも網羅していますので、皆様ぜひとも活用してみてください。
KUSANAGI 9 コマンドのマニュアル (ssl) :https://kusanagi.tokyo/kusanagi9/document/commands/#ssl