<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
SSH是伺服器登入工具,密碼登入和金鑰登入,都有各自的缺點。SSH還有第三種登入方法,那就是證書登入。很多情況下,它是更合理、更安全的登入方法,本文介紹證書登入的方法,需要的朋友可以參考下。
密碼登入和金鑰登入,都有各自的缺點。
密碼登入需要輸入伺服器密碼,這非常麻煩,也不安全,存在被暴力破解的風險。
金鑰登入需要使用者端生成證書的私鑰和公鑰,私鑰放在使用者端,公鑰上傳到伺服器端(遠端登陸端)。伺服器儲存使用者的公鑰,也需要使用者儲存伺服器公鑰的指紋。這對於多使用者、多伺服器的大型電腦構很不方便,如果有員工離職,需要將他的公鑰從每臺伺服器刪除。
證書登入就是為了解決上面的缺點而設計的。它引入了一個證書頒發機構(Certificate1 authority,簡稱 CA),對信任的伺服器頒發伺服器證書,對信任的使用者頒發使用者證書。
登入時,使用者和伺服器不需要提前知道彼此的公鑰,只需要交換各自的證書,驗證是否可信即可。
證書登入的主要優點有兩個:(1)使用者和伺服器不用交換公鑰,這更容易管理,也具有更好的可延伸性。(2)證書可以設定到期時間,而公鑰沒有到期時間。針對不同的情況,可以設定有效期很短的證書,進一步提高安全性。
SSH 證書登入之前,如果還沒有證書,需要生成證書。具體方法是:(1)使用者和伺服器都將自己的公鑰,發給 CA;(2)CA 使用伺服器公鑰,生成伺服器證書,發給伺服器;(3)CA 使用使用者的公鑰,生成使用者證書,發給使用者。
有了證書以後,使用者就可以登入伺服器了。整個過程都是 SSH 自動處理,使用者無感知。
第一步,使用者登入伺服器時,SSH 自動將使用者證書發給伺服器。
第二步,伺服器檢查使用者證書是否有效,以及是否由可信的 CA 頒發。
第三步,SSH 自動將伺服器證書發給使用者。
第四步,使用者檢查伺服器證書是否有效,以及是否由信任的 CA 頒發。
第五步,雙方建立連線,伺服器允許使用者登入。
證書登入的前提是,必須有一個 CA,而 CA 本質上就是一對金鑰,跟其他金鑰沒有不同,CA 就用這對金鑰去簽發證書。
雖然 CA 可以用同一對密碼簽發使用者證書和伺服器證書,但是出於安全性和靈活性,最好用不同的金鑰分別簽發。所以,CA 至少需要兩對金鑰,一對是簽發使用者證書的金鑰,假設叫做user_ca
,另一對是簽發伺服器證書的金鑰,假設叫做host_ca
。
使用下面的命令,生成user_ca
。
# 生成 CA 簽發使用者證書的金鑰
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/user_ca -C user_ca
上面的命令會在~/.ssh
目錄生成一對金鑰:user_ca
(私鑰)和user_ca.pub
(公鑰)。
這個命令的各個引數含義如下。
-t rsa
:指定金鑰演演算法 RSA。-b 4096
:指定金鑰的位數是4096位。安全性要求不高的場合,這個值可以小一點,但是不應小於1024。-f ~/.ssh/user_ca
:指定生成金鑰的位置和檔名。-C user_ca
:指定金鑰的識別字串,相當於註釋,可以隨意設定。使用下面的命令,生成host_ca
。
# 生成 CA 簽發伺服器證書的金鑰
$ ssh-keygen -t rsa -b 4096 -f host_ca -C host_ca
上面的命令會在~/.ssh
目錄生成一對金鑰:host_ca
(私鑰)和host_ca.pub
(公鑰)。
現在,~/.ssh
目錄應該至少有四把金鑰。
~/.ssh/user_ca
~/.ssh/user_ca.pub
~/.ssh/host_ca
~/.ssh/host_ca.pub
有了 CA 以後,就可以簽發伺服器證書了。
簽發證書,除了 CA 的金鑰以外,還需要伺服器的公鑰。一般來說,SSH 伺服器(通常是sshd
)安裝時,已經生成金鑰/etc/ssh/ssh_host_rsa_key
了。如果沒有的話,可以用下面的命令生成。
$ sudo ssh-keygen -f /etc/ssh/ssh_host_rsa_key -b 4096 -t rsa
上面命令會在/etc/ssh
目錄,生成ssh_host_rsa_key
(私鑰)和ssh_host_rsa_key.pub
(公鑰)。然後,需要把伺服器公鑰ssh_host_rsa_key.pub
,複製或上傳到 CA 所在的伺服器。
上傳以後,CA 就可以使用金鑰host_ca
為伺服器的公鑰ssh_host_rsa_key.pub
簽發伺服器證書。
$ ssh-keygen -s host_ca -I host.example.com -h -n host.example.com -V +52w ssh_host_rsa_key.pub
上面的命令會生成伺服器證書ssh_host_rsa_key-cert.pub
(伺服器公鑰名字加字尾-cert
)。這個命令各個引數的含義如下。
-s
:指定 CA 簽發證書的金鑰。-I
:身份字串,可以隨便設定,相當於註釋,方便區分證書,將來可以使用這個字串復原證書。-h
:指定該證書是伺服器證書,而不是使用者證書。-n host.example.com
:指定伺服器的域名,表示證書僅對該域名有效。如果有多個域名,則使用逗號分隔。使用者登入該域名伺服器時,SSH 通過證書的這個值,分辨應該使用哪張證書發給使用者,用來證明伺服器的可信性。-V +52w
:指定證書的有效期,這裡為52周(一年)。預設情況下,證書是永遠有效的。建議使用該引數指定有效期,並且有效期最好短一點,最長不超過52周。ssh_host_rsa_key.pub
:伺服器公鑰。生成證書以後,可以使用下面的命令,檢視證書的細節。
$ ssh-keygen -L -f ssh_host_rsa_key-cert.pub
最後,為證書設定許可權。
$ chmod 600 ssh_host_rsa_key-cert.pub
下面,再用 CA 簽發使用者證書。這時需要使用者的公鑰,如果沒有的話,使用者端可以用下面的命令生成一對金鑰。
$ ssh-keygen -f ~/.ssh/user_key -b 4096 -t rsa
上面命令會在~/.ssh
目錄,生成user_key
(私鑰)和user_key.pub
(公鑰)。
然後,將使用者公鑰user_key.pub
,上傳或複製到 CA 伺服器。接下來,就可以使用 CA 的金鑰user_ca
為使用者公鑰user_key.pub
簽發使用者證書。
$ ssh-keygen -s user_ca -I <a href="mailto:user@example" target="_blank" rel="nofollow">user@example</a>.com -n user -V +1d user_key.pub
上面的命令會生成使用者證書user_key-cert.pub
(使用者公鑰名字加字尾-cert
)。這個命令各個引數的含義如下。
-s
:指定 CA 簽發證書的金鑰-I
:身份字串,可以隨便設定,相當於註釋,方便區分證書,將來可以使用這個字串復原證書。-n user
:指定使用者名稱,表示證書僅對該使用者名稱有效。如果有多個使用者名稱,使用逗號分隔。使用者以該使用者名稱登入伺服器時,SSH 通過這個值,分辨應該使用哪張證書,證明自己的身份,發給伺服器。-V +1d
:指定證書的有效期,這裡為1天,強制使用者每天都申請一次證書,提高安全性。預設情況下,證書是永遠有效的。user_key.pub
:使用者公鑰。生成證書以後,可以使用下面的命令,檢視證書的細節。
$ ssh-keygen -L -f user_key-cert.pub
最後,為證書設定許可權。
$ chmod 600 user_key-cert.pub
CA 生成伺服器證書ssh_host_rsa_key-cert.pub
以後,需要將該證書發回伺服器,可以使用下面的scp
命令,將證書拷貝過去。
$ scp ~/.ssh/ssh_host_rsa_key-cert.pub <a href="mailto:root@host" target="_blank" rel="nofollow">root@host</a>.example.com:/etc/ssh/
然後,將下面一行新增到伺服器組態檔/etc/ssh/sshd_config
。
HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub
上面的程式碼告訴 sshd,伺服器證書是哪一個檔案。
重新啟動 sshd。
$ sudo systemctl restart sshd
# 或者
$ sudo service sshd restart
為了讓伺服器信任使用者證書,必須將 CA 簽發使用者證書的公鑰user_ca.pub
,拷貝到伺服器。
$ scp ~/.ssh/user_ca.pub <a href="mailto:root@host" target="_blank" rel="nofollow">root@host</a>.example.com:/etc/ssh/
上面的命令,將 CA 簽發使用者證書的公鑰user_ca.pub
,拷貝到 SSH 伺服器的/etc/ssh
目錄。
然後,將下面一行新增到伺服器組態檔/etc/ssh/sshd_config
。
TrustedUserCAKeys /etc/ssh/user_ca.pub
上面的做法是將user_ca.pub
加到/etc/ssh/sshd_config
,這會產生全域性效果,即伺服器的所有賬戶都會信任user_ca
簽發的所有使用者證書。
另一種做法是將user_ca.pub
加到伺服器某個賬戶的~/.ssh/authorized_keys
檔案,只讓該賬戶信任user_ca
簽發的使用者證書。具體方法是開啟~/.ssh/authorized_keys
,追加一行,開頭是@cert-authority principals="..."
,然後後面加上user_ca.pub
的內容,大概是下面這個樣子。
@cert-authority principals="user" ssh-rsa AAAAB3Nz...XNRM1EX2gQ==
上面程式碼中,principals="user"
指定使用者登入的伺服器賬戶名,一般就是authorized_keys
檔案所在的賬戶。
重新啟動 sshd。
$ sudo systemctl restart sshd
# 或者
$ sudo service sshd restart
至此,SSH 伺服器已設定為信任user_ca
簽發的證書。
使用者端安裝使用者證書很簡單,就是從 CA 將使用者證書user_key-cert.pub
複製到使用者端,與使用者的金鑰user_key
儲存在同一個目錄即可。
為了讓使用者端信任伺服器證書,必須將 CA 簽發伺服器證書的公鑰host_ca.pub
,加到使用者端的/etc/ssh/ssh_known_hosts
檔案(全域性級別)或者~/.ssh/known_hosts
檔案(使用者級別)。
具體做法是開啟ssh_known_hosts
或known_hosts
檔案,追加一行,開頭為@cert-authority *.example.com
,然後將host_ca.pub
檔案的內容(即公鑰)貼上在後面,大概是下面這個樣子。
@cert-authority *.example.com ssh-rsa AAAAB3Nz...XNRM1EX2gQ==
上面程式碼中,*.example.com
是域名的模式匹配,表示只要伺服器符合該模式的域名,且簽發伺服器證書的 CA 匹配後面給出的公鑰,就都可以信任。如果沒有域名限制,這裡可以寫成*
。如果有多個域名模式,可以使用逗號分隔;如果伺服器沒有域名,可以用主機名(比如host1,host2,host3
)或者 IP 地址(比如11.12.13.14,21.22.23.24
)。
然後,就可以使用證書,登入遠端伺服器了。
$ ssh -i ~/.ssh/user_key <a href="mailto:user@host" target="_blank" rel="nofollow">user@host</a>.example.com
上面命令的-i
引數用來指定使用者的金鑰。如果證書與金鑰在同一個目錄,則連線伺服器時將自動使用該證書。
廢除證書的操作,分成使用者證書的廢除和伺服器證書的廢除兩種。
伺服器證書的廢除,使用者需要在known_hosts
檔案裡面,修改或刪除對應的@cert-authority
命令的那一行。
使用者證書的廢除,需要在伺服器新建一個/etc/ssh/revoked_keys
檔案,然後在組態檔sshd_config
新增一行,內容如下。
RevokedKeys /etc/ssh/revoked_keys
revoked_keys
檔案儲存不再信任的使用者公鑰,由下面的命令生成。
$ ssh-keygen -kf /etc/ssh/revoked_keys -z 1 ~/.ssh/user1_key.pub
上面命令中,-z
引數用來指定使用者公鑰儲存在revoked_keys
檔案的哪一行,這個例子是儲存在第1行。
如果以後需要廢除其他的使用者公鑰,可以用下面的命令儲存在第2行。
$ ssh-keygen -ukf /etc/ssh/revoked_keys -z 2 ~/.ssh/user2_key.pub
到此這篇關於SSH證書登入方法詳細教學的文章就介紹到這了,更多相關SSH證書登入內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45