Při přihlašování k SSH jste jistě již mockrát viděli hlášku, jako je tato:
The authenticity of host 'example.com (1.2.3.4)' can't be established.
RSA key fingerprint is 1b:9b:b8:5e:74:b1:31:19:35:48:48:ba:7d:d0:01:f5.
Are you sure you want to continue connecting (yes/no)?
Většinou ji napoprvé bezmyšlenkovitě potvrdíme a všímáme si jí pouze v případě, že se objeví znovu. Značí to, že je něco špatně. Jak se ale této hlášce vyhnout úplně? Ověřování fingerprintu jistě nechceme vypnout, to by nebylo moc bezpečné 🙂 Jak tedy na to jinak? Založíme si pro SSH vlastní CA!
Nejprve si musíme vygenerovat podepisovací klíč.
$ mkdir .ssh/ca
$ cd .ssh/ca
$ ssh-keygen -t ed25519 -C ca@example.com -f ca.ed25519
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ca.ed25519.
Your public key has been saved in ca.ed25519.pub.
The key fingerprint is:
SHA256:J3nD9rV49uE57+2w79GeMKw1+jfZeEcc6crNjFdfXeg ca@exmaple.com
The key's randomart image is:
+--[ED25519 256]--+
| |
| |
| ..|
| o .o.|
| S * .o.+|
| = o.oEoB|
| +*@=B|
| +**#@|
| o..+X#|
+----[SHA256]-----+
Příkaz nám vygeneroval dva soubory ca.ed25519 a ca.ed25519.pub. Ukážu zde pouze generování pro algoritmus ED25519, pro jiné algoritmy je postup obdobný.
Nyní potřebujeme veřejný klíč serveru, ke kterému se budeme přihlašovat. Ten pak podepíšeme a podepsaný klíč nahrajeme zpět na server.
$ scp example.com:/etc/ssh/ssh_host_ed25519_key.pub .
$ ssh-keygen -s ca.ed25519 -I example.com -h -n example.com -V +156w ssh_host_ed25519_key.pub
Signed host key ssh_host_ed25519_key-cert.pub: id "example.com" serial 0 for example.com valid from 2017-03-03T17:57:00 to 2020-02-28T17:58:38
$ scp ssh_host_ed25519_key-cert.pub example.com:/etc/ssh/
Nyní bude potřeba říct o novém certifikátu SSH serveru. Přidáme do /etc/ssh/sshd_config jeden řádek a restartujeme SSH.
HostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pub
Nyní můžeme na všech počítačích, které se potřebují k serveru přihlašovat, přidat do ~/.ssh/known_hosts veřejný klíč naší nové CA.
@cert-authority *.example.com
SSH se již nebude ptát na potvrzení fingerprintu. Pokud soubor přidáváe na počítač, ze kterého jste certifikáty kopírovali, máte již cílový server v known_hosts přidaný. Musíme jej tedy ještě vymazat.
$ ssh-keygen -R example.com
# Host example.com found: line 3
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old