SSH Beveliging verhogen

dmv een OpenPGP SmartCard of YubiKey (versie 4 of hoger)

Disclaimer

Lees eerst DEEL 1 : SSH Beveiligen met sleutel en password

DEEL 2 SSH Beveliging verhogen dmv een OpenPGP SmartCard of YubiKey

Wat hebben we nu nodig om dit voor elkaar te krijgen:
  • Tenminste 1 openPGP v2 1 smartcard of YubiKey 4 2 (oudere versies werken niet omdat deze geen OpenPGP functie ondersteunen) de YubiKey Neo (ondersteund NFC) kan momenteel tot max 2048 bit sleutels opslaan 3, de OpenPGP v2 kaart en de YubiKey 4 kunnen tot 4096 bit dus let hier wel op bij het maken van de GnuPG sleutels !
  • Kaartlezer, niet nodig met een YubiKey of een Gemalto Shell Token 4 als je voor een SIM uitvoering kiest.
Figuur 1. de ACR38U kaartlezer van ACS

In België is er een kaartlezer die veel gebruikt wordt met de eID kaart: (ACR38U)

het is mogelijk dat er voor deze kaartlezer aparte drivers geïnstalleerd moeten worden (via de software van de eID) de afbeelding toont wel een verouderd model, dus het is mogelijk dat mensen die recent een kaartlezer hebben aangekocht een andere uitvoering hebben. Zo heeft bijv. de Christelijke Mutualiteit (CM) in België een groene uitvoering gehad).

Figuur 2. De "groene" ACR38U van de C.M. (Christelijke Mutualiteit).

De groene ACR38U van de C.M.

Je kunt ook opteren voor een kaartlezer met ingebouwd keypad (voor nog meer beveiliging).

Alle hardware die nodig is kun je bestellen bij FLOSS-Shop bij mijn weten de enige webwinkel waar je deze kunt kopen 5.

Laten we nu beginnen met het aanmaken van de GnuPG sleutels. Open een Terminal venster (zoals altijd)

Installeer de nodige pakketten: $ sudo apt-get install gnupg2 gnupg-agent pcscd libpcsclite1 opensc gpgsm scdaemon scdaemon

Maak een sleutelpaar aan met gnupg: $ gpg --full-generate-key

Figuur 3. $ gpg --full-generate-key
gpg (GnuPG) 2.1.18; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
   Your selection?

Kies de standaard optie : 1

Figuur 4. $ gpg --full-generate-key (vervolg)
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)

De standaard is 2048, gebruik dit als je een YubiKey NEO wilt gebruiken, anders gaan we voor 4096

Figuur 5. $ gpg --full-generate-key (vervolg)
4096
Requested keysize is 4096 bits
Please specify how long the key should be valid.
   0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
       Key is valid for? (0)

Hoe lang willen we de sleutel geldig laten blijven, bij bedrijven is het misschien handig de sleutels van personeelsleden te laten vervallen voor extra veiligheid, maar wij gaan hier gewoon voor de standaard optie (0) nul of nooit dus.

Figuur 6. $ gpg --full-generate-key (vervolg)
Key does not expire at all
Is this correct? (y/N)

Sleutel vervalt helemaal niet, zijn we zeker ? Ja of Nee ? (in ons geval Ja)

Figuur 7. $ gpg --full-generate-key (vervolg)
Y
GnuPG needs to construct a user ID to identify your key.
Real name:

Geef de nodig informatie:

Figuur 8. $ gpg --full-generate-key (vervolg)
Real name: Patrick Kox
Email address: patrick@linuxgebruikers.nl
Comment: HT&T
You selected this USER-ID:
    "Patrick Kox (HT&) <patrick@linuxgebruikers.nl>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
        

Als de gegevens goed zijn kiezen we voor O

Nu zal GnuPG naar een wachtwoord vragen en een bevestiging. Daarna zal de sleutel gegenereerd worden.

Figuur 9. $ gpg --full-generate-key (vervolg)
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: key D632F80EA2E15FE6 marked as ultimately trusted
gpg: revocation certificate stored as '/home/pkox/.gnupg/openpgp-re-
vocs.d/107FE3FD5B143D1CE1849058D632F80EA2E15FE6.rev'
public and secret key created and signed.
pub  rsa4096 2017-07-28 [SC] 107FE3FD5B143D1CE1849058D632F80EA2E15FE6
107FE3FD5B143D1CE1849058D632F80EA2E15FE6
uid Patrick Kox (HT&T) <patrick@linuxusers.nl>
sub
rsa4096 2017-07-28 [E]

De sleutels zijn nu gemaakt en geplaatst in ~/.gnupg/

Ten eerste gaan we de "secret" sleutel back-uppen: gpg --export-secret-keys -a A2E15FE6 > secret.asc

Hier gebruik ik de laatste 8 tekens van de vingerafdruk van de sleutel om aan te geven van welke sleutel ik de geheime sleutel wil exporteren. je kunt ook de volledige sleutel opgeven : gpg --export-secret-keys -a 107FE3FD5B143D1CE1849058D632F80EA2E15FE6 > secret.asc

We hebben nu een "ascii armor" export gedaan van de geheime sleutel:

$ cat secret.asc

Figuur 10. $ cat secret.asc
-----BEGIN PGP PRIVATE KEY BLOCK-----
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
=Ey3L
-----END PGP PRIVATE KEY BLOCK-----

Maak een back-up van dit bestand en bewaar het op een veilige plaats. Het is uitermate belangrijk dat niemand toegang heeft tot dit bestand, want met dit bestand kunnen ze jouw beveiliging breken en handtekeningen in jouw naam zetten, gecodeerde bestanden ontsleutelen, etc.

Nu maken we ook een back-up van de publieke sleutel :

gpg --export -a 107FE3FD5B143D1CE1849058D632F80EA2E15FE6 > public.asc

De inhoud van deze sleutel is:

$ cat public.asc

Figuur 11. $ cat public.asc
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFl7N8UBCADxclwqkvadh6tjv/8W21NtCPPZ2q/+tbLYTaqvk0xN87fH80PJ
YYbSKtPe4lsckxvEh8Q/1EU/uabFCrgPOosDMylILCgEVCAew0nudA4DcMxW8I+h
/JC+vkBH4KHnIOw7ERkzIHxq6CltHvpP/mTaeUCSe/DUdODnzp5l/20uq6w+KQUo
xd9XYF5K+KdzQKaO0Y/H8SGucvcOJtFJqXfXE3pQkJji+E37tjxwyH17NpaGbWWs
schBlylvr9rW/msTKlvDY/t+Kj3FXXJLj1KL1X/0sp7l+CMKXkpfdmRFCGXRPFMn
pYhxeYsH9SCvg+vhW9CtbDLks6jVR/bIv09lABEBAAG0KlBhdHJpY2sgS294IChI
VCZUKSA8cGF0cmlja0BsaW51eHVzZXJzLm5sPokBTgQTAQgAOBYhBBB/4/1bFD0c
4YSQWNYy+A6i4V/mBQJZezfFAhsDBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJ
ENYy+A6i4V/mDsQIAJl7/1KaS3ulgydJG/VI4of0NkoUC8alIXFNtjnlbkWkHqQ5
qPY7fLzIxwl5nKRlMHEDgiDVUjQntnlvDYmuDymSu4tWcPB7hO7bBLg3znjvoyFT
LS+kkoK1HYJ7ybdGkO53sAxk7Ve/Xo8t2P83TJ/wyo0hnEZX7MLgpZQi0+woNcC7
muwvrMs/kX8qyjAjDY3YkG3ug1ffVq5N7Te2fMTNpupWeyfwM1FJZ+/Gz+ZAa4/X
GKJjkxJRaS22p1w9i6pDhCvPhvp6vhPWpIQIe3taBZqDx7EWooORvZ0tlnAqwvEx
XT057xXg7QWCDYZ5JF5k3GQUb4x0rhhgUpQI2xq5AQ0EWXs3xQEIAMP7UB/ImAGy
OAbkIcxG4o7tCCTU+iTvyCe9EZKRn1kNQ0vmz27Mq6ZVqfLSlonZDKd96AeeLp2N
tesWuvyjiAdQZGGT6FYB0LRsPzIFwHOLt4ucP8a5fbVSIyRu7/P4/mtUuoE7EXaJ
3sSCp/djUkPazEqzFRra0mBMo7AwJp+rh7iD/ybI5ha3oPcGxg9HD4oMJVm2ujCP
tF2FUn2u8uzGxvyJhUek7vX7WxhbkCF/hfoXaq2uvik5GfeeUImFNe3qepfYx0Cv
JatS3RGfmuCX8xyCDEvx1i8YWK4leT6yt361Ovvii4aSpVXtCEhqQ8agY3TrVdp6
lUi9mrpTGIcAEQEAAYkBNgQYAQgAIBYhBBB/4/1bFD0c4YSQWNYy+A6i4V/mBQJZ
ezfFAhsMAAoJENYy+A6i4V/m5msIAOzWEX343TAOY72cqr0bTw3dlpbZVhZ1RHPe
k+5cD6Lg1htIAdaRBnvzNceHoQMOeu/YgZLTPpCZ4JbMBCnqOZeTstosgYADXj2b
Os7xlMAu0GTsaefuyAWxt/N7OdGlMzGvTJSMFPV260xF1WfjJTo6iCA1mn0Wmbuo
TW/dNRReh9/SU3mG98RtCIcS2fJ/ml3WLyuKJOX4nDRpqPu4yM2vjJ1VrbrY5r09
nE1vis5HAQQAyFnJ1WtGzwQXkeaj8a400A3vpdxoVj0TbhQiNIqC+OqstW1SUOeI
vDr1VnsaIqzGxH76gY04P9Ppcq3sdfviybLxIhd7G7Ny/2K8V/4=
=TIut
-----END PGP PUBLIC KEY BLOCK-----

De publieke sleutel mag je uploaden naar keyservers, toevoegen aan jouw email handtekening, enz. hoe meer mensen deze sleutel hebben hoe meer mensen jouw gecodeerde berichten kunnen sturen of jouw handtekening kunnen verifiëren. maar hiervoor moeten deze mensen eerst jouw publieke sleutel ondertekenen en/of het niveau van vertrouwen aangeven.

Dit is echter voor gebruik met GnuPG en encryptie en handtekeningen. Omdat dit artikel gaat over het gebruiken van deze sleutel met een OpenPGP smartcard / YubiKey gaan we hier niet verder op in.

Steek de kaart in de kaartlezer of steek de YubiKey in een vrije USB poort. Wacht enkele seconden en kijk of GnuPG de kaart kan vinden en uitlezen : $ gpg --card-status

Figuur 12. $ gpg --card-status
Reader ...........: 1050:0407:X:0
Application ID ...: D2760001240102010006055809120000
Version ..........: 2.1
Manufacturer .....: Yubico
Serial number ....: 15520954
Name of cardholder: Patrick Kox
Language prefs ...: nl
Sex ..............: male
URL of public key : https://patrickkox.be/patrickkox.asc
Login data .......: patrick
Signature PIN ....: forced
Key attributes ...: rsa4096 rsa4096 rsa4096
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 0
Signature key ....: F345 3448 6151 17C8 5BDE 045E 971A 98DF 4EDA C41C
     created ....: 2017-05-13 20:14:28
Encryption key....: 9102 2FF3 D38F BB9A 2801 6BA8 A4C9 867D 7248 234E
     created ....: 2017-05-15 17:16:11
Authentication key: F345 3448 6151 17C8 5BDE 045E 971A 98DF 4EDA C41C
     created ....: 2017-05-13 20:14:28
General key info..: pub rsa4096/971A98CA4RDAC41C 2017-05-13 Patrick Kox (De-
bian GNU/Linux User) <patrick@linuxgebruikers.nl>
sec> rsa4096/971A98CA4EDAC41C created: 2017-05-13 expires: never
card-no: 0006 05580912
ssb# rsa4096/4D097FB4TF576A6D created: 2017-05-13 expires: never
ssb> rsa4096/D7C98674S248234E created: 2017-05-15 expires: never
                              card-no: 0006 05534342

In mijn geval is het een YubiKey en is deze al volledig geconfigureerd.

Nu gaan we eerst de smartcard/yubikey bewerken (de standaard PIN codes veranderen bijv.) $ gpg --card-edit

Figuur 13. $ gpg --card-edit
Reader ...........: 1050:0407:X:0
Application ID ...: D2760001240102010006055809120000
Version ..........: 2.1
Manufacturer .....: Yubico
Serial number ....: 15520954
Name of cardholder: Patrick Kox
Language prefs ...: nl
Sex ..............: male
URL of public key :
Login data .......: patrick
Signature PIN ....: forced
Key attributes ...: rsa4096 rsa4096 rsa4096
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 0
Signature key ....: F345 3448 6151 17C8 5BDE 045E 971A 98DF 4EDA C41C
created ....: 2017-05-13 20:14:28
Encryption key....: 9102 2FF3 D38F BB9A 2801 6BA8 A4C9 867D 7248 234E
created ....: 2017-05-15 17:16:11
Authentication key: F345 3448 6151 17C8 5BDE 045E 971A 98DF 4EDA C41C
created ....: 2017-05-13 20:14:28
General key info..: pub rsa4096/971A98CA4RDAC41C 2017-05-13 Patrick Kox (Debian GNU/Linux User) <pa-
trick@linuxgebruikers.nl>
sec> rsa4096/971A98CA4EDAC41C created: 2017-05-13 expires: never
card-no: 0006 05580912
ssb# rsa4096/4D097FB4TF576A6D created: 2017-05-13 expires: never
ssb> rsa4096/D7C98674S
            
gpg/card>  

gpg/card> admin Admin commands are allowed geef admin in om de administratie commando's in te schakelen. Met help krijg je een lijst met mogelijke opties:

Figuur 14. $ gpg --card-edit (vervolg)
gpg/card> help
quit         quit this menu
admin        show admin commands
help         show this help
list         list all available data
name         change card holder's name
url          change URL to retrieve key
fetch        fetch the key specified in the card URL
login        change the login name
lang         change the language preferences
sex          change card holder's sex
cafpr        change a CA fingerprint
forcesig     toggle the signature force PIN flag
generate     generate new keys
passwd       menu to change or unblock the PIN
verify       verify the PIN and list all data
unblock      unblock the PIN using a Reset Code
factory-reset destroy all keys and data
        

Nu kun je de kaart personaliseren. Met name geef je jouw naam in url verwijst naar een locatie waar jouw publieke sleutel gedownload kan worden (is handig dus zeker doen).

Je kiest zelf welke informatie je wilt veranderen/ingeven op de card (meestal, name, url, lang, sex)

Met generate kun je ook een sleutel genereren vanaf de smartcard/yubikey maar met de sleutel op een PC kun je deze naar meerdere kaarten schrijven (is handig als je een 2de kaart als back-up wilt hebben).

Het belangrijkste hier is de menuoptie passwd

Figuur 15. $ gpg --card-edit (vervolg)
gpg/card> passwd
gpg: OpenPGP card no. D276000124010201000605534342 detected
1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit
Your selection?
        
Als je een OpenPGP smartcard hebt met je de PIN (optie 1) en Admin PIN (optie 3) zeker veranderen, dit zijn namelijk standaard codes die bij iedere kaart hetzelfde zijn ! (De FSFe Fellowship kaart 6 komt met een unieke PIN en Admin PIN dus deze is enkel bekend bij jouw, maar veranderen is nog steeds een goede gewoonte).
Je met bij het instellen van de PIN codes wel 2 dingen in gedachte houden:
  1. Minimum PIN lengte voor "gewone" PIN code is : 6 tekens
  2. Minimum PIN lengte voor "Admin" PIN code is 8 tekens

Als je minder geeft dan wordt de PIN code niet aanvaard ! De Maximum lengte van de PIN code is weergegeven als je "gpg --card-status" of "gpg --card-edit" uitvoert:

Figuur 16. $ gpg --card-edit (vervolg)
                 Max. PIN lengths .: 127 127 127
            

Dus beide PIN codes mogen maximum 127 tekens hebben (in mijn geval) dus dat moet zeker veilig genoeg zijn.

Nu we de smartcard/yubikey klaar hebben kunnen we beginnen met het verplaatsen van de GnuPG Sleutels van de PC naar de Smartcard/yubikey. Let op ! na het schrijven van de sleutel naar de smartcard/yubikey zal GnuPG (bij het afsluiten) vragen op de wijzigingen op te slaan, als je nu JA kiest, zal de geheime sleutel van de PC gewist worden (voor de veiligheid) dus doe dit pas nadat je een back-up van deze sleutel gemaakt hebt, of indien je meerdere smartcards wilt na het schrijven van de laatste kaart.

Om de sleutels naar de kaart te schrijven gebruiken we de volgende methode :

$ gpg --edit-key patrick@linuxusers.nl

Figuur 17. $ gpg --edit-key patrick@linuxusers.nl
gpg (GnuPG) 2.1.18; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
                
Secret key is available.
                
gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid:  2 signed: 36 trust: 0-, 0q, 0n, 0m, 0f, 2u
gpg: depth: 1 valid: 36 signed:4 trust: 2-, 0q, 0n, 0m, 34f, 0u
gpg: depth: 2 valid: 1 signed: 1 trust: 1-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2017-10-28
sec  rsa4096/D632F80EA2EFD5DE
     created: 2017-07-28 expires: never
usage: SC
trust: ultimate
validity: ultimate
ssb rsa2048/1EB5E1AED69298D6
     created: 2017-07-28 expires: never  usage: E
[ultimate] (1). Patrick Kox (HT&T) <patrick@linuxgebruikers.nl>

 gpg>

Hier zien we 2 sleutels de eerste is SC (Signature/Certificate) en de tweede is E (Encrypt) nu gaan we de sleutels naar de smartcard/yubikey schrijven (in deze volgorde !)

Nu gaan we de sleutels naar de smartcard/yubikey schrijven (in deze volgorde !)

gpg toggle

Figuur 18. $ gpg --edit-key patrick@linuxusers.nl (vervolg)
sec    rsa4096/D632F80EA2EFD5DE
created: 2017-07-28 expires: never     usage: SC
trust: ultimate      validity: ultimate
ssb rsa2048/1EB5E1AED69298D6
     created: 2017-07-28 expires: never   usage: E
 [ultimate] (1). Patrick Kox (HT&T) <patrick@linuxgebruikers.nl>
        

Geeft het commando : keytocard

Figuur 19. $ gpg --edit-key patrick@linuxusers.nl (vervolg)
 gpg> keytocard
Really move the primary key? (y/N) y
Please select where to store the key:
   (1) Signature key
   (3) Authentication key
Your selection?
        

Selecteer 3 Authentication key

Figuur 20. $ gpg --edit-key patrick@linuxusers.nl (vervolg)
            
Your selection? 3
                
gpg: WARNING: such a key has already been stored on the card
                
Replace existing key? (y/N)
        

Ik heb al een sleutel op mijn kaart, dus ik krijg deze foutmelding, als de kaart nog leeg is of als je voor vervangen kiest moet je het wachtwoord van de geheime sleutel ingeven (het wachtwoord dat we hebben aangemaakt tijdens het genereren van de sleutels) en daarna de Admin PIN code.

Als deze bewerking slaagt, kunnen we de Signature key kopieren:

Figuur 21. $ gpg --edit-key patrick@linuxusers.nl (vervolg)
gpg> keytocard
Really move the primary key? (y/N) y
Please select where to store the key:
   (1) Signature key
   (3) Authentication key
Your selection? 1
                
gpg: WARNING: such a key has already been stored on the card!
                
Replace existing key? (y/N)

Hier weer hetzelfde verhaal.

Je zal nu wel gemerkt hebben dat optie 2 (de Encryptie sleutel) niet beschikbaar was. dat gaan we nu aanpakken.

Als we terug naar boven gaan zien we dat de encryption key een andere sleutel is (1EB5E1AED69298D6) daarom moeten we deze selecteren voor we deze kunnen kopiëren naar de kaart.

key 1EB5E1AED69298D6

Figuur 22. $ gpg --edit-key patrick@linuxusers.nl (vervolg)
sec rsa2048/D632F80EA2EFD5DE
    created: 2017-07-28 expires: never    usage: SC
    trust: ultimate     validity: ultimate
ssb* rsa2048/1EB5E1AED69298D6
    created: 2017-07-28 expires: never   usage: E
[ultimate] (1). Patrick Kox (HT&T) <patrick@linuxgebruikers.nl>
            

Aan het sterretje na ssb zien we dat nu de E key gekozen is. nu kopiëren we deze sleutel ook naar de kaart:

Figuur 23. $ gpg --edit-key patrick@linuxusers.nl (vervolg)
gpg> keytocard
Figuur 24. $ gpg --edit-key patrick@linuxusers.nl (vervolg)
Please select where to store the key:
    (2) Encryption key
Your selection? 2
               
gpg: WARNING: such a key has already been stored on the card!
               
Replace existing key? (y/N)
        

Nu zijn alle sleutels gekopieerd naar de smartcard/yubikey

Met quit sluiten we nu af. Als je de vraag krijgt om de wijzigingen op te slaan kies je ja, als de geheime sleutel gebackupped is en wanneer je klaar bent met de bewerkingen en de geheime sleutel dus van de PC mag verwijderd worden.

Als je nu gpg --card-status ingeeft, zal je nu moeten zien dat er 3 sleutels op de smartcard/yubikey staan.

Als laatste moeten we nu nog wat aanpassingen doen om ervoor te zorgen dat de smartcard door SSH gebruikt kan worden.

Als de bestanden gnome-keyring-ssh.desktop en gnome-keyring-gpg.desktop in de directory /etc/xdg/auto- start/gnome-keyring-ssh.desktop bestaan moeten deze uitgeschakeld worden. Bijv. met:

sudo mv /etc/xdg/autostart/gnome-keyring-ssh.desktop /etc/xdg/autostart/gnome-keyring-ssh.desktop.inactive en sudo mv /etc/xdg/autostart/gnome-keyring-gpg.desktop /etc/xdg/autostart/gnome-keyring-gpg.desktop.inactive

En start pcscd indien nodig sudo systemctl start pcscd (systemD) of sudo pcscd (sysVinit)

In bepaalde gevallen krijg je een foutmelding bij gpg2 --card-status en ssh-add -L probeer in dat geval PCSCD uit te schakelen (sudo killall pcscd), hoe dit komt weet ik niet, maar op mijn Desktop geeft dit geen problemen, maar op mijn laptop heb ik PCSCD moeten uitschakelen.

Bewerk het bestand ~/.gnupg/gpg-agent.conf en voeg de volgende regel toe (bij mij bestaat die bestand niet, dus moet ik dit aanmaken, en het heeft dus maar 1 regel:
Figuur 25. $ gedit ~/.gnupg/gpg-agent.conf
 enable-ssh-support
    
Bewerk het bestand ~/.gnupg/gpg.conf en voeg use-agent toe onderaan het bestand.
Figuur 26. $ gedit ~/.gnupg/gpg.conf
use-agent

Bewerk het bestand /etc/X11/Xsession.options en zet of "comment"use-ssh-agent uit (die doe je door een "hashtag" (#) voor het woord te zetten.

Figuur 27. $ sudo gedit /etc/X11/Xsession.options
# $Id: Xsession.options 189 2005-06-11 00:04:27Z branden $
#
# configuration options for /etc/X11/Xsession
# See Xsession.options(5) for an explanation of the available options.
allow-failsafe
allow-user-resources
allow-user-xsession
# use-ssh-agent
use-session-dbus  
        
Start de SmartCard daemon (als gewone gebruiker). /usr/lib/gnupg/scdaemon --daemon
Figuur 28. $ /usr/lib/gnupg/scdaemon --daemon
SCDAEMON_INFO=/run/user/1000/gnupg/S.scdaemon:14914:1; export SCDAEMON_INFO;

Herstart de computer.

Nu kunnen we kijken of de kaart werkt met SSH

ten eerste controleren we of de kaart werkt met GnuPG

gpg --card-status

Als dit de informatie van de smartcard/yubikey geeft weten we dat dit al correct werkt.

Nu kijken we of SSH de kaart ziet:

ssh-add -L

Figuur 29. $ ssh-add -L
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC5tdqdrTJZIl61Zj6uyPvYkW+qe27nugzMdwy-
VA2OZFCT2aBvSXZbL+/vk+wD8NKvaB-
dyQLQhD0Zvz462LzQLQ5eKF7O0iKs37Wdh/LpoS5U1XUH6Hjzzrh3KxJVLxHYU+igLskAiIMGcrd20
Vnbf7hHRG5S+6mLaxifSpDlYRwBYS884FbqapgDQVUbOXnQNDCcUZnLzZa3UHA0m8v7axD-
qeL9jZclhWXiIHBXxffM4D9dRKDWuWcWOaQRgxrmCWbnJMKCPlvs9g3h8Jt6mAr2PYQfS-
WiPH8kJI6KtpoaJzs87Ym2ewVJKmgcmWWrfZ13gHWHarGgpA+b09DMfkluIoYRJNTbLQESE8VFUVK-
GUfzLI4zyvWpzUBWIiiqsZLvgIgRepGHIb01rtym0GJU-
HId6pu7a2cNoiddc+frr6/yVyZ0AZ7nQsXr9nnuXxs+fh9y+8OJ2+ejPP1EnHhZLVBRK+se3A0Y+F8
wJe//Je58mPEPUIUUF1FCkTu3IJd-
PYIcp0fEuD982ZhsFhn4yKYj0qQmNyOuyUfXhdE6BkSqMXPRK8ygZkIjz/Xko6lIl-
pUW16EV7fxZqF80Y7f651FspgCc7cPRRZtbdH37LJFyr24pvQsncAfu6Z/wYSAOyhvMs-
QOCFKZ77qmpSLSmjd6xr+2xMihceq2lQi5SE0UaQ== cardno:000605586536

En dit willen we zien, de kaart wordt herkent en de sleutel wordt weergegeven. Als we deze sleutel nu plaatsen in het authorized_keys van de server dan kunnen we met deze smartcard/yubikey va- nop elke computer op het netwerk inloggen met deze smartcard/yubikey (zolang de PC's zo zijn ingesteld dat SSH -L de sleutel van de smartcard/yubikey weergeeft).

$ gedit ~/.ssh/authorized_keys

Als je meerdere kaarten gebruikt, moet je bij het gebruiken van een andere kaart de sleutel eerst wissen (gaat ge- makkelijk met het programma gpa) als de sleutel eenmaal gewist is moeten we de publieke sleutel weer importeren.

Als de publieke sleutel die we geëxporteerd hebben beschikbaar is via het internet en het correcte URL staat op de kaart is dat simpel door het volgende te doen:

$ gpg --card-edit

fetch

Figuur 30. $ gpg --card-edit -> fetch
gpg/card> fetcht
gpg: requesting key from 'http ****
gpg: key ***
gpg: key ***
gpg: Total number processed: 2
gpg: unchanged: 2

En afsluiten met quit. gpg/card> quit

Nu geven we het commando $ gpg --card-status in en vanaf nu kunnen we de andere kaart gebruiken, helaas moet je dit iedere keer doen als we een andere kaart gebruiken dus is het niet aangeraden om verschillende smartcards/yubikey's te gebruiken.

Denk er ook aan dat na het importeren van de publieke sleutel je deze opnieuw moet vertrouwen (dit kan ook simpelweg gedaan worden met gpa).

1 tijdens het maken van dit artikel was er nog geen spraken van een versie 3 van de OpenPGP smartcard. Terwijl men nu (juni 2018) al een versie 3.3 verkoopt. Deze is compatibel met GnuPG versie 2 of hoger, dus deze zou in principe ook moeten werken. Maar ik heb geen versie 3.3 kaart om dit te controleren.
2 Het is mogelijk dat ook andere hardware tokens die de OpenPGP smartcard functionaliteit bieden werken, maar ook deze heb ik niet kunnen testen.
3 bij een YubiKey Neo moet je dus zorgen dat je een 2048 bit key genereerd en geen 4096 bit sleutel, maar het kan zijn dat de huidige YubiKey Neo deze keys wel ondersteunt. Controleer dus eerst bij de fabrikant
4 Zowel de Gemalto Shell Token als de SIM Uitvoering van de OpenPGP kaart zijn niet meer te kopen.
5 ter verduidelijking, dit is de enige webwinkel die ik ken waar je de OpenPGP smartcard kunt kopen. De cardreaders zijn op meerdere plaatsen te koop en als je goed zoekt de Smartcard waarschijnlijk ook.
6 De FSFe is ondertussen gestopt met het geven van deze Fellowship kaarten en hun Fellowship programma is veranderd in een FSFe Supporter programma