6 PKI SSH使用者認證

2021-10-07 16:57:16 字數 4782 閱讀 7288

2. 密碼認證

3. 主機認證

參考secure shell(安全外殼協議,簡稱ssh)是一種加密的網路傳輸協議,可在不安全的網路中為網路服務提供安全的傳輸環境。ssh通過在網路中建立安全通道來實現ssh客戶端與伺服器之間的連線。ssh最常見的用途是遠端登入系統,人們通常利用ssh來傳輸命令列介面和遠端執行命令。

使用ssh進行遠端登入主要經歷兩個階段,第一階段是安全通道的建立,第二階段是使用者認證。

第一階段的介紹可參考5. pki - ssh建立安全通道的過程。

第二階段使用者認證支援公鑰認證、密碼認證和主機認證三種認證方式。

公鑰認證的步驟大致如下:

其中包含user name、service name、認證方式"publickey"、公鑰演算法名稱、公鑰內容(可以是證書)等。其中公鑰演算法名稱不受金鑰交換時演算法的限制。

byte      ssh_msg_userauth_request

string user name in iso-10646 utf-8 encoding [rfc3629]

string service name in us-ascii

string "publickey"

boolean false

string public key algorithm name

string public key blob

伺服器收到訊息後進行校驗,如果伺服器不支援客戶端的公鑰演算法,則會拒絕認證請求。如果驗證通過返回使用者認證公鑰ok的訊息給客戶端。

byte      ssh_msg_userauth_pk_ok

string public key algorithm name from the request

string public key blob from the request

如果驗證失敗返回使用者認證失敗的訊息。

byte         ssh_msg_userauth_failure

name-list authentications that can continue

boolean partial success

客戶端不論是否收到伺服器的公鑰驗證結果,直接傳送認證請求給伺服器。以下是傳送包的內容。

byte      ssh_msg_userauth_request

string user name

string service name

string "publickey"

boolean true

string public key algorithm name

string public key to be used for authentication

string signature

與公鑰驗證請求相比,多了簽名資訊。簽名使用與認證公鑰對應的私鑰進行,簽名在以下內容,以下順序的基礎上進行。

string    session identifier

byte ssh_msg_userauth_request

string user name

string service name

string "publickey"

boolean true

string public key algorithm name

string public key to be used for authentication

伺服器首先對公鑰進行認證,如果公鑰認證通過,則利用該公鑰對簽名進行驗證。如果兩者均校驗通過,則認為公鑰認證成功。伺服器會傳送認證成功訊息給客戶端。

byte      ssh_msg_userauth_success
密碼認證使用下面的包進行。其中使用者名稱、密碼資訊均用明文表示,密碼用iso-10646 utf-8編碼方式進行編碼。報文在傳輸層進行加密,伺服器和客戶端都會校驗傳輸層的機密性,如果傳輸層不具有機密性,則密碼認證會被禁用。

byte      ssh_msg_userauth_request

string user name

string service name

string "password"

boolean false

string plaintext password in iso-10646 utf-8 encoding [rfc3629]

伺服器對使用者名稱、密碼進行認證。如果認證成功則返回認證成功。

byte      ssh_msg_userauth_success
已過期密碼是不能用於密碼認證的。如果密碼已經過期,伺服器會傳送變更密碼響應給客戶端。

byte      ssh_msg_userauth_passwd_changereq

string prompt in iso-10646 utf-8 encoding [rfc3629]

string language tag [rfc3066]

客戶端收到變更密碼訊息後,可以選擇使用不同的認證方式認證,或者請求乙個新的密碼並重試密碼認證。此時傳送的訊息包如下:

byte      ssh_msg_userauth_request

string user name

string service name

string "password"

boolean true

string plaintext old password in iso-10646 utf-8 encoding

[rfc3629]

string plaintext new password in iso-10646 utf-8 encoding

[rfc3629]

如果密碼變更成功且認證成功,返回:

byte      ssh_msg_userauth_success
如果密碼變更成功,但需要更多認證,返回:

byte ssh_msg_userauth_failure

name-list authentications that can continue

boolean true

變更密碼失敗,或者是因為不支援密碼變更,或者是舊密碼錯誤。但是如果伺服器已經傳送了密碼變更的報文,我們知道伺服器是支援密碼變更的。返回:

byte         ssh_msg_userauth_failure

name-list authentications that can continue

boolean false

由於新密碼未被接受導致密碼變更失敗(如密碼太簡單),返回:

ssh_msg_userauth_changereq
有些**希望基於使用者本地主機和遠端主機上的使用者名稱進行認證。這種認證方式不適合應用與於保密級別高的**,但在某些環境下會比較方便。這種認證方式是可選的。使用這種認證方式時要特別注意防止普通使用者獲取本地主機的私鑰。

客戶端使用客戶端主機的私鑰進行簽名,傳送簽名給伺服器。

byte      ssh_msg_userauth_request

string user name

string service name

string "hostbased"

string public key algorithm for host key

string public host key and certificates for client host

string client host name expressed as the fqdn in us-ascii

string user name on the client host in iso-10646 utf-8 encoding

[rfc3629]

string signature

簽名使用主機私鑰在以下內容、以下順序的基礎上進行。

string    session identifier

byte ssh_msg_userauth_request

string user name

string service name

string "hostbased"

string public key algorithm for host key

string public host key and certificates for client host

string client host name expressed as the fqdn in us-ascii

string user name on the client host in iso-10646 utf-8 encoding

[rfc3629]

伺服器使用客戶端主機公鑰對請求簽名進行驗證。

the secure shell (ssh) authentication protocol

ssh兩種認證方式的原理介紹

**ssh原理及兩種登入方法

django使用者認證系統 修改密碼6

再此之前我們已經完成了使用者登入 註冊 登出等功能,接下來讓我們繼續為使用者提供修改密碼的功能。該功能 django 的 auth 應用也已經為我們提供,過程幾乎和之前的登入功能完全一樣。修改密碼的的檢視函式預設渲染的模板名為 password change form.html,因此首先在 regi...

Apache使用者認證

一.基本的apache使用者認證方法 若對某一目錄下的檔案如 home ftp pub需要做到使用者認證,則在httpd.conf 中加入下面的行 options indexes followsymlinks allowoverride authconfig order allow,deny all...

rails使用者認證

反正自己也是新手,生怕學來的東西給忘了 ruby1.9.3 p194 rails3.2.8 rails new authen skip bundle cd authen rails g model user name string salt string hashed pswd string rak...