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