ECDSA key fingerprint - looks like it is base64 encoded, but too few characters

I've setup a GitLab VM, and have created a project on it. Now I'm trying to connect to it from another machine using my git client (Git for Windows v2.7.1...also tried upgrading to latest version which is 2.15.1, but no change).

On the Windows machine, I try:

git push -u origin --all
The authenticity of host 'localgit.local (10.1.2.3)' can't be established.
ECDSA key fingerprint is SHA256:twmcV7LjBtI9vUsDeFEHeH0lUcBAihWtGye0K9vHCrk.
Are you sure you want to continue connecting (yes/no)? no

I chose "no" because when I went to double check that on the VM, I found a different fingerprint:

ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
256 7e:e4:4e:7f:47:b0:41:75:2c:45:bd:be:f5:44:77:d7 /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA)

Ok, it's in hex format, so I'll just convert that to base64, right?

hex: 7ee44e7f47b041752c45bdbef54477d7
base64: fuROf0ewQXUsRb2+9UR31w==

Well that doesn't match...what if I go the other way and convert that base64 fingerprint to hex and see what it looks like? Turns out I cannot, it is 43 characters, and a base64 string must have a length that is a multiple of 4.

Any ideas on what I'm missing here?

5
задан 20 December 2017 в 01:53
2 ответа

Формат октетов, разделенных двоеточием, представляет собой отпечаток MD5, а не SHA256. Вы не можете напрямую преобразовать одно в другое (ну, возможно, вы могли бы, если отмените отпечаток MD5, но это все равно потребляет немного мощности процессора).

Этот ssh-keygen выводит отпечаток MD5, предполагает, что на этом компьютере может быть запущена довольно старая версия OpenSSH, потому что формат вывода по умолчанию в наши дни - SHA256. Вы можете попробовать передать -E sha256 в ssh-keygen , чтобы заставить его выводить хэш SHA256, на случай, если есть версия, которая поддерживает SHA256, но по умолчанию установлена ​​на MD5, и вы оказались запускал его, но я бы не хотел сказать, что он будет работать точно.

Если вы не можете заставить свою версию ssh-keygen выводить SHA256, другой вариант - «понизить версию» "клиент SSH для вывода отпечатка MD5 при подключении. Для этого вам нужно установить -o FingerprintHash = md5 в командной строке (или FingerprintHash md5 в конфигурации SSH). Как именно это лучше сделать, учитывая, что вы используете SSH через git, оставим в качестве упражнения для проницательного читателя.

Боковая панель: причина, по которой хэш SHA256 base64 не является «правильным» количеством символов, заключается в том, что хеш SHA256 не является «правильным» количеством символов для размещения в строке base64 без некоторого завершающего = знаков. Поскольку последние несколько символов «всегда» будут знаками = , они просто отбрасываются, что позволяет сэкономить пару бесполезных символов.

1
ответ дан 3 December 2019 в 02:01

У меня был тот же вопрос, поэтому я копнул немного глубже.

На сервере Linux,вы можете запустить

awk '{print $2}' /etc/ssh/ssh_host_ecdsa_key.pub | base64 -d | sha256sum -b | sed 's/ .*$//' | xxd -r -p | base64

, чтобы сгенерировать тот же отпечаток SHA256 + Base64 , который появляется, когда ваш клиент пытается подключиться.

Источник: https://www.lastbreach.com/blog/ssh-public-key-verification-with-fingerprinthash

0
ответ дан 3 December 2019 в 02:01

Теги

Похожие вопросы