Yubikey4でefi画像に署名しようとしています
Yubikeyを次のように構成しました。
yubico-piv-tool -k $key -a import-key -s 9c < test-key.rsa
yubico-piv-tool -k $key -a import-certificate -s 9c < test-cert.pem
証明書をcertdirに含めました:
certutil -A -n "efi-cert" -t ,,Tu -d $CERTDIR -a -i test-cert.pem
Pkcs11-toolでトークンを確認できます。
$ pkcs11-tool --module=/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so -L
Available slots:
Slot 0 (0xffffffffffffffff): Virtual hotplug slot
(empty)
Slot 1 (0x1): Yubico Yubikey 4 OTP+CCID 00 00
token label : PIV_II (PIV Card Holder pin)
token manufacturer : piv_II
token model : PKCS#15 emulated
token flags : rng, login required, PIN initialized, token initialized
hardware version : 0.0
firmware version : 0.0
serial num : 00000000
しかし、pesignで使用しようとすると、トークンが見つかりません
$ Sudo pesign -i bootx64.efi --export-signature bootx64.sig --sign -d sha256 -t "PIV_II (PIV Card Holder pin)" -c "efi-cert" -n $CERTDIR
could not find token "PIV_II (PIV Card Holder pin)"
pesign: Could not find certificate efi-cert
Straceで、pesignがopensc-pkcs11.soを読み取らないのを見ましたが、libnssckbi.soを読み取ります。これが理由でしょうか? Yubikeyを別の方法で構成する必要がありますか?
どんな助けでも大歓迎です。
私はそれをうまく動かすことができました:
Straceで、pesignが$ CERTDIR/libnssckbi.soを探しているのがわかりましたが、ln -s/usr/lib/x86_64-linux-gnu/nss/libnssckbi.soを実行しても機能しませんでした。これを解決するopensc-pkcs11.soとリンクしました:
ln -s /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so $CERTDIR/libnssckbi.so
そして今、それはトークンを見つけます。より良い解決策があるかどうか教えてください(これは理想的ではないようです)。
また、pesign ... -c "efi-cert" ...での私の引数は間違っていました。これは、certdirに含めるときに証明書に付けたラベルではなく、トークンでラベルを使用する必要があるためです。
以下を実行すると、正しいラベルが「efi-cert」ではなく「CertificateforDigitalSignature」であることがわかりました。
$ pkcs11-tool --module=/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so -O
Using slot 1 with a present token (0x1)
Public Key Object; RSA 2048 bits
label: SIGN pubkey
ID: 02
Usage: encrypt, verify
Certificate Object, type = X.509 cert
label: Certificate for Digital Signature
ID: 02
Data object 27638640
label: 'Card Capability Container'
application: 'Card Capability Container'
app_id: 2.16.840.1.101.3.7.1.219.0
flags: <empty>
Data object 27637904
label: 'Card Holder Unique Identifier'
application: 'Card Holder Unique Identifier'
app_id: 2.16.840.1.101.3.7.2.48.0
flags: <empty>
Data object 27638000
label: 'Unsigned Card Holder Unique Identifier'
application: 'Unsigned Card Holder Unique Identifier'
app_id: 2.16.840.1.101.3.7.2.48.2
flags: <empty>
Data object 27638096
label: 'X.509 Certificate for PIV Authentication'
application: 'X.509 Certificate for PIV Authentication'
app_id: 2.16.840.1.101.3.7.2.1.1
flags: <empty>
Data object 27636560
label: 'X.509 Certificate for Digital Signature'
application: 'X.509 Certificate for Digital Signature'
app_id: 2.16.840.1.101.3.7.2.1.0
flags: <empty>
Data object 27636656
label: 'X.509 Certificate for Key Management'
application: 'X.509 Certificate for Key Management'
app_id: 2.16.840.1.101.3.7.2.1.2
flags: <empty>
Data object 27636752
label: 'X.509 Certificate for Card Authentication'
application: 'X.509 Certificate for Card Authentication'
app_id: 2.16.840.1.101.3.7.2.5.0
flags: <empty>
Data object 27636848
label: 'Security Object'
application: 'Security Object'
app_id: 2.16.840.1.101.3.7.2.144.0
flags: <empty>
Data object 27636944
label: 'Discovery Object'
application: 'Discovery Object'
app_id: 2.16.840.1.101.3.7.2.96.80
flags: <empty>
これで、次を実行できます。
$ pesign -i bootx64.efi --export-signature bootx64.sig --sign -d sha256 -t "PIV_II (PIV Card Holder pin)" -c "Certificate for Digital Signature" -n $CERTDIR
Enter Password or Pin for "PIV_II (PIV Card Holder pin)":
Enter passphrase for private key: