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 をコマンドとしてインストールしています。

Scribus48.png この記事はまだ書きかけ(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 までを含めて指定してください。

参考資料