ブログ

swupdate で使用する鍵を変更・追加する方法

at_shiita.ishigaki
2022年8月2日 15時33分

swupdate で使用する鍵を変更・追加する方法について本ブログに記載します。

前提条件

本ブログは既に Armadillo に swupdate によって initial_setup.swu をインストールした状態で、Armadillo に証明書が登録されている状態を想定しております。
証明書が登録されているかは、/etc/swupdate.pem より確認できます。

[armadillo ~]# cat /etc/swupdate.pem
# atmark-1
-----BEGIN CERTIFICATE-----
MIIBuzCCAWCgAwIBAgIUbbibr2AEmw3ohnmkXeGPPf0glgcwCgYIKoZIzj0EAwIw
:(省略)
-----END CERTIFICATE-----
# atmark-2
-----BEGIN CERTIFICATE-----
MIIBvzCCAWagAwIBAgIUfagaF9RAjO2+x54PMqIlZkain9MwCgYIKoZIzj0EAwIw
:(省略)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE----- # 登録した証明書
MIIBmjCCAUCgAwIBAgIUSB+WtEVimKWGlR+X3iaZcZm/VREwCgYIKoZIzj0EAwIw
:(省略)
-----END CERTIFICATE-----

また、新しい鍵を生成するには mkswu のバージョンが 4.3 以上である必要があります。mkswu のバージョンは以下のコマンドで確認できます。

[ATDE ~]$ mkswu --version

mkswu のバージョンが古い場合は以下のコマンドを実行しアップデートしてください。

[ATDE ~]$ sudo apt update && sudo apt install mkswu

新しい鍵の生成方法

以下に鍵を生成する例を示します。
※ここでは例として、パスワードは無しで鍵のコモンネームを test とします。

[ATDE ~]$ mkswu --genkey --plain --cn test
設定ファイルを更新しました:/home/atmark/mkswu/mkswu.conf
/home/atmark/mkswu/swupdate.key はすでに存在します。新しい鍵を作成しますか? [Y/n] #Enter を押下
署名鍵 /home/atmark/mkswu/swupdate-2.key と証明書 swupdate-2.pem を作成します。
-----
/home/atmark/mkswu/swupdate-2.pem をコンフィグファイルに追加します。
/home/atmark/mkswu/swupdate-2.pem が次のアップデートをインストールするときに転送されます。
インストールされてから現在の鍵を /home/atmark/mkswu/mkswu.conf から外してください。
 
[ATDE ~]$ ls mkswu/swupdate-2.*
/home/atmark/mkswu/swupdate-2.key
/home/atmark/mkswu/swupdate-2.pem

新しい鍵を生成すると、mkswu.conf に先ほど生成した鍵のパスが記載されます。

[ATDE ~]$ tail /home/atmark/mkswu/mkswu.conf
#ROLLOUT_ERROR_THRESHOLD=30
 
# extra swupdate certificate. Remove the old one and use new
# PRIVKEY after having installed an update with this first
PUBKEY="$PUBKEY,$CONFIG_DIR/swupdate-2.pem"
# remove "NEW_" to use
NEW_PRIVKEY="$CONFIG_DIR/swupdate-2.key"
# This controls if we should update certificates on device,
# and can be removed once all devices have been updated to only allow new key
UPDATE_CERTS=yes

UPDATE_CERTS が yes の場合、次の swupdate 実行時に Armadillo の /etc/swupdate.pem が更新されます。このときの swupdate は新しく生成した鍵ではなく、今まで使用していた鍵が使用されます。
mkswu --genkey を使用せずに /etc/swupdate.pem を直接編集し、証明書を入力している場合は、その証明書が消えますのでご注意ください。
今まで使用していた鍵を使用できないようにする場合は、mkswu.conf を以下のように編集します。

PUBKEY="$CONFIG_DIR/swupdate-2.pem"
PRIVKEY="$CONFIG_DIR/swupdate-2.key"
UPDATE_CERTS=yes

swupdate.pem の更新

鍵を生成後に swupdate を実行します。
swupdate 実行後に /etc/swupdate.pem が更新されます。

[armadillo ~]# cat /etc/swupdate.pem
:(省略)
-----END CERTIFICATE-----
# swupdate-2.pem #追加された証明書
-----BEGIN CERTIFICATE-----
MIIBljCCATygAwIBAgIUJOus/kS1s8ye0Iv1H7LY1rWCzaMwCgYIKoZIzj0EAwIw
:(省略)
-----END CERTIFICATE-----
# swupdate.pem
:(省略)

以上の手順で、今まで使用していた鍵と新しく生成した鍵どちらを使用しても swupdate を実行することができます。
また、今まで使用していた鍵を使用できないよう mkswu.conf を編集した場合は、/etc/swupdate.pem は以下のようになります。

[armadillo ~]# cat /etc/swupdate.pem
:(省略)
-----END CERTIFICATE-----
# swupdate-2.pem #追加された証明書
-----BEGIN CERTIFICATE-----
MIIBljCCATygAwIBAgIUJOus/kS1s8ye0Iv1H7LY1rWCzaMwCgYIKoZIzj0EAwIw
:(省略)
-----END CERTIFICATE-----
# swupdate.pemが削除されている