2015-10-21 30 views
1

當我們ssh給一個主持人時,他或者不認識。在後一種情況下,我們首先嚐試連接,我們被提示爲以什麼格式存儲在已知主機中的服務器的公鑰?

主機'13x.8x.xx.1x1(13x.8x.xx.1x1)'的真實性無法建立。 RSA密鑰指紋是xx:xx:xx:xx:xx:26:86:80:5f:17:xx:xx:xx:xx:6d:6c。 您確定要繼續連接(是/否)嗎?是

然後服務器的RSA公鑰存儲在.ssh/know_hosts文件中。它是如何編碼的?我們如何確保這不是一箇中間人?最後,這個所謂的「主機密鑰」是不對稱的。這是什麼意思?

回答

2

我們如何確保這不是一箇中間人?

第一次,您可以檢查RSA指紋。有人需要事先傳達給你,或者你需要以某種方式安全地接收它(即通過https站點發布,或通過簽名的電子郵件接收)。例如,許多託管提供商向您發送您的主機SSH指紋。

在Ubuntu,你可以使用你找到自己的RSA指紋:

ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub 

注意,還有其他在使用指紋識別的格式(DSA和ECDSA),根據不同的服務器和客戶端配置。在您的known_hosts文件中,您可以看到每個指紋的存儲格式。

它是如何編碼的?

known_hosts文件是base64編碼中的主機名(通常是主機名散列),指紋類型和指紋本身(密碼信息)的列表。格式詳細信息可在OpenSSH man page,SSH_KNOWN_HOSTS FILE FORMAT部分中找到。

這個所謂的「主機密鑰」是不對稱的。這是什麼意思?

這些不對稱機制意味着雖然指紋允許您驗證服務器的身份,但不能用它來生成有效標識(模擬)該服務器。

必須指出的是,指紋(和相應的私鑰)作爲祕密加密操作:隨機挑戰從客戶端發送到服務器。具有私鑰的服務器可以簽名表示挑戰並將其發回,然後客戶端可以驗證簽名是有效的,因爲指紋是合適的。

換言之,加密祕密是雙重的,私鑰可以加密或簽名,並且公鑰可以用於解密或驗證簽名。其中一個密鑰可以在沒有風險的情況下公開發布,並用於驗證簽名和密文只有私鑰所有者才能解碼的文本。這大致是密碼學中的不對稱手段。