Let’s Encrypt
このページでは、お使いの Web サーバで Let's Encrypt が発行する SSL 証明書を使用する方法を説明しています。 Let's Encrypt の証明書は無償で取得できます。
目次
Certbot
Certbot は Let's Encrypt から証明書を取得するツールの中でもっとも有名なツールです。なお、 2022 年 5 月以降、 certbot は snapper からインストールする必要があります。
snapper のリポジトリ追加
zypper addrepo --refresh https://download.opensuse.org/repositories/system:/snappy/openSUSE_Leap_15.3 snappy
openSUSE Leap 15.3 以外のバージョンをお使いの場合は、上記の URL 内の "openSUSE_Leap_15.3" をバージョンに合わせて変更してください。
snapd と certbot のインストール
snap というコマンドが Snap Store からアプリをインストールするコマンドになります。このコマンドを使用するには、 snapd というデーモンをインストールする必要があります。
sudo zypper install snapd sudo zypper --gpg-auto-import-keys refresh sudo systemctl enable snapd.service sudo systemctl start snapd.service systemctl enable snapd.apparmor.service systemctl start snapd.apparmor.service snap install core ; snap refresh core snap install --classic certbot ln -s /snap/bin/certbot /usr/bin/
なお、最後の行で certbot をコマンドとしてインストールしています。
この記事はまだ書きかけ(stub)の状態です! この記事には加筆が求められています。もしあなたが加筆できるようならば、openSUSE 記事スタイルガイドに従って加筆をお願いします。また他の加筆が必要な記事の一覧もご参照ください。 |
このページの残りは改訂が必要です。記述通りには動作しないかもしれません。
設定の修正
Leap 42.x の場合
既定では certbot はテスト用の証明機関を利用するようになっています。そのため、発行された証明書は公的な有効性はありません。本番用の Let's Encrypt を使用する場合は、 /etc/certbot/cli.ini
ファイルを編集する必要があります。
下記のような行を:
# The staging/testing server server = https://acme-staging.api.letsencrypt.org/directory # The productive server. # server = https://acme-v01.api.letsencrypt.org/directory
下記のように変更します:
# The staging/testing server # server = https://acme-staging.api.letsencrypt.org/directory # The productive server. server = https://acme-v01.api.letsencrypt.org/directory
実行
sudo update-ca-certificates
apache を利用している場合:
sudo certbot --apache
nginx を利用している場合:
sudo certbot --nginx
あとは certbot が既存の apache/nginx の仮想ホスト設定を読み込み、証明書の作成に必要な情報をそこから取得します。情報の取得が完了すると、下記のようなダイアログボックスが表示されるはずです:
ファイル:Certbot dialog choose domains.png
上記のようなダイアログはカーソルキーでカーソルを移動することができます。あとはスペースキーで SSL 証明書を作成するドメインを選択して Enter キーを押します。すると、下記のようなダイアログが表示されます:
ファイル:Certbot dialog redirect.png
ここでは、 HTTP から HTTPS への自動転送を有効化するかどうかを選択します。セキュリティの向上を主眼においた場合、有効化 (Secure) しておくことをお勧めします。何らかの理由で HTTP を使用する必要がある場合は Easy を選択してください。あとは Enter を押すだけです:
ファイル:Certbot dialog success.png
作業後に apache や nginx サーバを再起動する必要はありません。
ブラウザでのテスト
ブラウザを開いて "https://" で Web サイトにアクセスして、証明書のエラーが出ないことを確認します。
SSL Labs 等でテストを行ってもかまいません。
更新の自動化
Let's Encrypt の証明書は 90 日間のみ有効です。更新を自動化したい場合は、少なくとも月 1 回の間隔で cron ジョブを動作させることをお勧めします。
具体的なには、 /etc/cron.d/certbot.cron
ファイルを編集して "renew" と書かれた行のコメント文字を外します:
# renew all certificates methode: renew 10 5 1 * * root /usr/bin/certbot renew
参考資料
uacme
Let's Encrypt から証明書を取得するための代替および扱いやすいツールとして、 uacme と呼ばれるものがあります (https://github.com/ndilieto/uacme) 。
インストール
openSUSE Tumbleweed もしくは Leap 15.3 以降をお使いの場合は、 zypper でインストールできます (リポジトリの追加は不要です。標準リポジトリ内にあります):
zypper in uacme
使いかた
github のページ (https://github.com/ndilieto/uacme) にも書かれているとおり、 uacme は最小限の機能のみを提供するツールです。実際に uacme 自身ではチャレンジ (http/dns その他) には対応しておらず、フックプログラムを併用する必要があります。 http チャレンジを使用したい場合 (もっともよくあるパターンです) は、 /usr/share/uacme/uacme.sh というフックプログラムを使用します。
たとえば下記のようになります:
# uacme ディレクトリの作成 mkdir /etc/ssl/uacme /etc/ssl/uacme/private # 新しい鍵の作成 (メールアドレス指定) uacme new mail_address@example.org
# acme-challenge ディレクトリの作成 mkdir /srv/www/htdocs/.well-known/acme-challenge # 発行 ("example.org" を実際の FQDN に置き換えてください) # (複数の FQDN に対応する証明書を発行したい場合は、それらをスペース区切りで指定してください) uacme -h /usr/share/uacme/uacme.sh issue example.org
これだけです。 "uacme issue" コマンドが何も出力しなければ、コマンドは成功しています。
発行された証明書は "/etc/ssl/uacme/example.org/cert.pem" に、 対応する鍵は "/etc/ssl/uacme/private/example.org/key.pem" にそれぞれ保存されます。
FAQ
- /srv/www/htdocs 以外のドキュメントルートディレクトリを使用したい場合は、そのディレクトリを "UACME_CHALLENGE_PATH" 環境変数で /.well-known/acme-challenge までを含めて指定してください。