@ -105,20 +105,20 @@ Is this correct? (y/N) <b>y</b>
GnuPG needs to construct a user ID to identify your key.
GnuPG needs to construct a user ID to identify your key.
Real name: Dummy
Email address: dummy@dummy.co
Real name: < b > Dummy< / b >
Email address: < b > dummy@dummy.co< / b >
Comment:
Comment:
You selected this USER-ID:
You selected this USER-ID:
"Dummy < dummy @ dummy . co > "
"Dummy < dummy @ dummy . co > "
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? < b > O< / b >
gpg: /home/user/.gnupg/trustdb.gpg: trustdb created
gpg: /home/user/.gnupg/trustdb.gpg: trustdb created
gpg: key B4A67FB911B1ED6B marked as ultimately trusted
gpg: key B4A67FB911B1ED6B marked as ultimately trusted
gpg: directory '/home/user/.gnupg/openpgp-revocs.d' created
gpg: directory '/home/user/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/user/.gnupg/openpgp-revocs.d/A157C7E15F3D6C7445B40626B4A67FB911B1ED6B.rev'
gpg: revocation certificate stored as '/home/user/.gnupg/openpgp-revocs.d/A157C7E15F3D6C7445B40626B4A67FB911B1ED6B.rev'
public and secret key created and signed.
public and secret key created and signed.
gpg/card> list
gpg/card> < b > list< / b >
Reader ...........: Yubico YubiKey OTP FIDO CCID 00 00
Reader ...........: Yubico YubiKey OTP FIDO CCID 00 00
Application ID ...: D2760001240103040006152800150000
Application ID ...: D2760001240103040006152800150000
@ -151,26 +151,25 @@ ssb> ed25519/B1B9E83616EF39E7 created: 2020-10-05 expires: never
card-no: 0006 15280015
card-no: 0006 15280015
ssb> cv25519/286C74DF11045D46 created: 2020-10-05 expires: never
ssb> cv25519/286C74DF11045D46 created: 2020-10-05 expires: never
card-no: 0006 15280015
card-no: 0006 15280015
gpg/card> quit
gpg/card> < b > quit< / b >
pub ed25519 2020-10-05 [SC]
pub ed25519 2020-10-05 [SC]
A157C7E15F3D6C7445B40626B4A67FB911B1ED6B
A157C7E15F3D6C7445B40626B4A67FB911B1ED6B
uid Dummy < dummy @ dummy . co >
uid Dummy < dummy @ dummy . co >
sub ed25519 2020-10-05 [A]
sub ed25519 2020-10-05 [A]
sub cv25519 2020-10-05 [E]
sub cv25519 2020-10-05 [E]
$ ssh-add -L
$ < b > ssh-add -L< / b >
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGzO7860chQPMw0NuLDhBqZd1IcfIqBnvy4GSbzZd4vu cardno:000615280015
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGzO7860chQPMw0NuLDhBqZd1IcfIqBnvy4GSbzZd4vu cardno:000615280015
$ mkdir sshca
$ ssh-keygen -t ed25519 -N '' -C 'Test CA' -f sshca/ca
$ cat sshca/ca.pub
$ < b > mkdir sshca< / b >
$ < b > ssh-keygen -t ed25519 -N '' -C 'Test CA' -f sshca/ca< / b >
$ < b > cat sshca/ca.pub< / b >
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICAL7l1sQuKe4daLfKGZuiRPZZXquokQyH+p6utlZxZ+ Test CA
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICAL7l1sQuKe4daLfKGZuiRPZZXquokQyH+p6utlZxZ+ Test CA
$ ssh-add -L > sshca/id_ed25519.pub
$ ssh-keygen -s sshca/ca -I test-dummy sshca/id_ed25519.pub
$ < b > ssh-add -L > sshca/id_ed25519.pub< / b >
$ < b > ssh-keygen -s sshca/ca -I test-dummy sshca/id_ed25519.pub< / b >
Signed user key sshca/id_ed25519-cert.pub: id "test-dummy" serial 0 valid forever
Signed user key sshca/id_ed25519-cert.pub: id "test-dummy" serial 0 valid forever
$ mkdir ~/.ssh
$ cp sshca/id_ed25519-cert.pub ~/.ssh/
$ ssh-keygen -Lf .ssh/id_ed25519-cert.pub
$ < b > mkdir ~/.ssh< / b >
$ < b > cp sshca/id_ed25519-cert.pub ~/.ssh/< / b >
$ < b > ssh-keygen -Lf .ssh/id_ed25519-cert.pub< / b >
.ssh/id_ed25519-cert.pub:
.ssh/id_ed25519-cert.pub:
Type: ssh-ed25519-cert-v01@openssh.com user certificate
Type: ssh-ed25519-cert-v01@openssh.com user certificate
Public key: ED25519-CERT SHA256:fuoQ5RdcNRAj0VAyw/vqA584nNW2HMYNGk4NQEFjTSM
Public key: ED25519-CERT SHA256:fuoQ5RdcNRAj0VAyw/vqA584nNW2HMYNGk4NQEFjTSM
@ -190,31 +189,32 @@ $ ssh-keygen -Lf .ssh/id_ed25519-cert.pub
At this point, you have to copy the CA's public key into your server's authorized_keys file . This can't be done with ssh-copy-id as the CA's key is not loaded into you ssh-agent nor available in the ~/.ssh directory.
At this point, you have to copy the CA's public key into your server's authorized_keys file . This can't be done with ssh-copy-id as the CA's key is not loaded into you ssh-agent nor available in the ~/.ssh directory.
You should have something like :
You should have something like :
server:~# cat .ssh/authorized_keys
server:~# < b > cat .ssh/authorized_keys< / b >
cert-authority ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICAL7l1sQuKe4daLfKGZuiRPZZXquokQyH+p6utlZxZ+ Test CA
cert-authority ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICAL7l1sQuKe4daLfKGZuiRPZZXquokQyH+p6utlZxZ+ Test CA
Note the line beginning with cert-authority which is not common. For reference, read "AUTHORIZED_KEYS FILE FORMAT" chapter here : [http://man.he.net/man5/authorized_keys ](http://man.he.net/man5/authorized_keys )
Note the line beginning with cert-authority which is not common. For reference, read "AUTHORIZED_KEYS FILE FORMAT" chapter here : [http://man.he.net/man5/authorized_keys ](http://man.he.net/man5/authorized_keys )
Now, try to login :
Now, try to login :
$ ssh root@server
< pre >
$ < b > ssh root@server< / b >
sign_and_send_pubkey: signing failed for ED25519 "cardno:000615280015": agent refused operation
sign_and_send_pubkey: signing failed for ED25519 "cardno:000615280015": agent refused operation
Password:
Password:
< / pre >
So we're completely out of luck : authentication doesn't works.
So we're completely out of luck : authentication doesn't works.
For comparison, let's try with an NIST P384 key :
For comparison, let's try with an NIST P384 key :
$ ykman openpgp reset
< pre >
$ < b > ykman openpgp reset< / b >
WARNING! This will delete all stored OpenPGP keys and data and restore factory settings? [y/N]: y
WARNING! This will delete all stored OpenPGP keys and data and restore factory settings? [y/N]: y
Resetting OpenPGP data, don't remove your YubiKey...
Resetting OpenPGP data, don't remove your YubiKey...
Success! All data has been cleared and default PINs are set.
Success! All data has been cleared and default PINs are set.
PIN: 123456
PIN: 123456
Reset code: NOT SET
Reset code: NOT SET
Admin PIN: 12345678
Admin PIN: 12345678
$ rm -R .gnupg
$ rm -R .ssh
$ gpg --card-edit
$ < b > rm -R .gnupg< / b >
$ < b > rm -R .ssh< / b >
$ < b > gpg --card-edit< / b >
Reader ...........: Yubico YubiKey OTP FIDO CCID 00 00
Reader ...........: Yubico YubiKey OTP FIDO CCID 00 00
Application ID ...: D2760001240103040006152800150000
Application ID ...: D2760001240103040006152800150000
@ -238,19 +238,19 @@ For comparison, let's try with an NIST P384 key :
Authentication key: [none]
Authentication key: [none]
General key info..: [none]
General key info..: [none]
gpg/card> admin
gpg/card> < b > admin< / b >
Admin commands are allowed
Admin commands are allowed
gpg/card> key-attr
gpg/card> < b > key-attr< / b >
Changing card key attribute for: Signature key
Changing card key attribute for: Signature key
Please select what kind of key you want:
Please select what kind of key you want:
(1) RSA
(1) RSA
(2) ECC
(2) ECC
Your selection? 2
Your selection? < b > 2< / b >
Please select which elliptic curve you want:
Please select which elliptic curve you want:
(1) Curve 25519
(1) Curve 25519
(4) NIST P-384
(4) NIST P-384
Your selection? 4
Your selection? < b > 4< / b >
The card will now be re-configured to generate a key of type: nistp384
The card will now be re-configured to generate a key of type: nistp384
Note: There is no guarantee that the card supports the requested size.
Note: There is no guarantee that the card supports the requested size.
If the key generation does not succeed, please check the
If the key generation does not succeed, please check the
@ -259,25 +259,25 @@ For comparison, let's try with an NIST P384 key :
Please select what kind of key you want:
Please select what kind of key you want:
(1) RSA
(1) RSA
(2) ECC
(2) ECC
Your selection? 2
Your selection? < b > 2< / b >
Please select which elliptic curve you want:
Please select which elliptic curve you want:
(1) Curve 25519
(1) Curve 25519
(4) NIST P-384
(4) NIST P-384
Your selection? 4
Your selection? < b > 4< / b >
The card will now be re-configured to generate a key of type: nistp384
The card will now be re-configured to generate a key of type: nistp384
Changing card key attribute for: Authentication key
Changing card key attribute for: Authentication key
Please select what kind of key you want:
Please select what kind of key you want:
(1) RSA
(1) RSA
(2) ECC
(2) ECC
Your selection? 2
Your selection? < b > 2< / b >
Please select which elliptic curve you want:
Please select which elliptic curve you want:
(1) Curve 25519
(1) Curve 25519
(4) NIST P-384
(4) NIST P-384
Your selection? 4
Your selection? < b > 4< / b >
The card will now be re-configured to generate a key of type: nistp384
The card will now be re-configured to generate a key of type: nistp384
gpg/card> generate
Make off-card backup of encryption key? (Y/n) n
gpg/card> < b > generate< / b >
Make off-card backup of encryption key? (Y/n) < b > n< / b >
Please note that the factory settings of the PINs are
Please note that the factory settings of the PINs are
PIN = '123456' Admin PIN = '12345678'
PIN = '123456' Admin PIN = '12345678'
@ -291,25 +291,24 @@ For comparison, let's try with an NIST P384 key :
< n > y = key expires in n years
< n > y = key expires in n years
Key is valid for? (0)
Key is valid for? (0)
Key does not expire at all
Key does not expire at all
Is this correct? (y/N) y
Is this correct? (y/N) < b > y< / b >
GnuPG needs to construct a user ID to identify your key.
GnuPG needs to construct a user ID to identify your key.
Real name: Dummy
Email address: dummy@dummy.co
Real name: < b > Dummy< / b >
Email address: < b > dummy@dummy.co< / b >
Comment:
Comment:
You selected this USER-ID:
You selected this USER-ID:
"Dummy < dummy @ dummy . co > "
"Dummy < dummy @ dummy . co > "
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? < b > o< / b >
gpg: /home/user/.gnupg/trustdb.gpg: trustdb created
gpg: /home/user/.gnupg/trustdb.gpg: trustdb created
gpg: key BA792909F5154B7A marked as ultimately trusted
gpg: key BA792909F5154B7A marked as ultimately trusted
gpg: directory '/home/user/.gnupg/openpgp-revocs.d' created
gpg: directory '/home/user/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/user/.gnupg/openpgp-revocs.d/B591751A56B42EA25C8BEF60BA792909F5154B7A.rev'
gpg: revocation certificate stored as '/home/user/.gnupg/openpgp-revocs.d/B591751A56B42EA25C8BEF60BA792909F5154B7A.rev'
public and secret key created and signed.
public and secret key created and signed.
gpg/card> list
gpg/card> < b > list< / b >
Reader ...........: Yubico YubiKey OTP FIDO CCID 00 00
Reader ...........: Yubico YubiKey OTP FIDO CCID 00 00
Application ID ...: D2760001240103040006152800150000
Application ID ...: D2760001240103040006152800150000
@ -343,18 +342,18 @@ For comparison, let's try with an NIST P384 key :
ssb> nistp384/062DF688F54D721D created: 2020-10-05 expires: never
ssb> nistp384/062DF688F54D721D created: 2020-10-05 expires: never
card-no: 0006 15280015
card-no: 0006 15280015
gpg/card> quit
gpg/card> < b > quit< / b >
pub nistp384 2020-10-05 [SC]
pub nistp384 2020-10-05 [SC]
B591751A56B42EA25C8BEF60BA792909F5154B7A
B591751A56B42EA25C8BEF60BA792909F5154B7A
uid Dummy < dummy @ dummy . co >
uid Dummy < dummy @ dummy . co >
sub nistp384 2020-10-05 [A]
sub nistp384 2020-10-05 [A]
sub nistp384 2020-10-05 [E]
sub nistp384 2020-10-05 [E]
$ ssh-add -L > sshca/id_ecdsa.pub
$ ssh-keygen -s sshca/ca -I test-dummy sshca/id_ecdsa.pub
$ < b > ssh-add -L > sshca/id_ecdsa.pub< / b >
$ < b > ssh-keygen -s sshca/ca -I test-dummy sshca/id_ecdsa.pub< / b >
Signed user key sshca/id_ecdsa-cert.pub: id "test-dummy" serial 0 valid forever
Signed user key sshca/id_ecdsa-cert.pub: id "test-dummy" serial 0 valid forever
$ cp sshca/id_ecdsa-cert.pub ~/.ssh/
$ ssh-keygen -Lf .ssh/id_ecdsa-cert.pub
$ < b > cp sshca/id_ecdsa-cert.pub ~/.ssh/< / b >
$ < b > ssh-keygen -Lf .ssh/id_ecdsa-cert.pub< / b >
.ssh/id_ecdsa-cert.pub:
.ssh/id_ecdsa-cert.pub:
Type: ecdsa-sha2-nistp384-cert-v01@openssh.com user certificate
Type: ecdsa-sha2-nistp384-cert-v01@openssh.com user certificate
Public key: ECDSA-CERT SHA256:N3JmjLOQ5VClsChOlmeyh5a8kF0RCMdAOz1VWde8lwk
Public key: ECDSA-CERT SHA256:N3JmjLOQ5VClsChOlmeyh5a8kF0RCMdAOz1VWde8lwk
@ -370,8 +369,9 @@ For comparison, let's try with an NIST P384 key :
permit-port-forwarding
permit-port-forwarding
permit-pty
permit-pty
permit-user-rc
permit-user-rc
$ ssh root@server
$ < b > ssh root@server< / b >
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-47-generic x86_64)
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-47-generic x86_64)
root@server:~#
root@server:~#
< / pre >
**Authentication is working as expected here !**
**Authentication is working as expected here !**