基於CA簽名的使用者公鑰管理
透過CA簽名使用者公鑰的證照統一管理方法。透過該方法可以實現基於角色透過ssh管理對伺服器的訪問。 |
為了安全便捷的管理和維護伺服器,禁止SSH密碼登陸,並用證照認證是比較好的選擇。其方法是使用者生成金鑰對,其私鑰嚴格保管不洩露,將公鑰新增到伺服器上使用者對應的authorized_keys檔案,然後就可以用證照方式進行登陸,在證照生成的時候,也可以對證照新增密碼,防止私鑰被盜用。
這種方式很方便,但是存在一個問題,就是當伺服器比較多的時候,對伺服器上公鑰的管理就會比較麻煩,容易當人員發生變化時候,容易清理遺漏,從而導致安全隱患。本文我們介紹一種透過中心CA統一簽發證照管理SSH證照的方法。
為了解決統一管理的問題,引入CA來統一管理SSH的認證。使用者仍然需要生成一個公鑰和私鑰對證照。但是,認證不是透過將使用者公鑰新增伺服器來完成,使用證照頒發機構(CA)金鑰對使用者公鑰進行簽名。簽名過程僅生成了第三個證照檔案,使用者透過該簽發證照和自己原有的證照對就能完成登陸。
伺服器上,只需配置SSH對CA的公鑰認證,伺服器透過檢測使用者證照是否透過CA簽發,來完成認證過程。
使用者生成一個證照頒發機構CA私鑰對,並保證私鑰的私鑰安全:
umask 77 # 修改掩碼,保證此後生成目錄和檔案的許可權
mkdir ~/CC-ca && cd ~/CC-ca ssh-keygen -C CA -f ca -b 4096
生成時候,給證照新增一個密碼,以防止洩露。
然後在伺服器上,指定允許由CA簽名的所有使用者訪問該伺服器:
將CA的公鑰上傳到伺服器上,例如在/etc/ssh/ca.pub
在/etc/ssh/sshd_config新增下面的行,配置CA簽發的證照的信任:
TrustedUserCAKeys /etc/ssh/ca.pub
重啟sshd服務:
service sshd reload
使用者使用ssh-keygen生成證照,並且把公鑰發給CA中心,CA中心用私鑰對該證照新增簽名:
ssh-keygen -s ca -I USER_ID -V +12w -z 1 id_ecdsa.pub
行說明:
-s ca 想使用CA進行簽名
-I USER_ID -使用者ID/使用者名稱
-V +12w -證照過期前的時間,該例子中證照有效期為12周
-z 1 設定證照的序列號,可以用證照的序列號來登出證照。
id_ecdsa.pub:需要簽名的使用者公鑰
生成證照id_ecdsa-cert.pub,該證照需要傳送給開發人員,使用者將其放入~/.ssh中。
上面就可以完成了證照的CA簽名和統一認證。但是還有一個問題,可能使用者也需要分類,不同的團隊和角色的,需要有不同的訪問許可權。實際上,可以在簽名過程中新增角色,用來指定允許伺服器的訪問許可權。新新增使用者時候,即可使他們可以訪問所有相關伺服器,而無需在這些伺服器上新增任何內容。
建立用於配置訪問許可權的資料夾:
mkdir /etc/ssh/auth_principals
在該資料夾中,可以使用伺服器使用者名稱建立檔案,該使用者可以登入。例如,要授予對某些角色的root使用者訪問許可權,請新增檔案/etc/ssh/auth_principals/root。
在/etc/ssh/auth_principals/root檔案中,配置可以以root使用者身份登入的角色,每行一個角色,比如
admin_dev root_op ROLE1
在伺服器上SSHD配置檔案/etc/ssh/sshd_config,新增對角色的認證:
AuthorizedPrincipalsFile /etc/ssh/auth_principals/%u
然後重新載入sshd服務
service sshd reload
可以使用一下 行,簽發帶角色的證照:
ssh-keygen -s ca -I USER_ID -n ROLE1,ROLE2 -V +12w -z 2 id_ecdsa.pub
與以前命令列一樣,多增加了-n ROLE1,ROLE2標誌。
現在,該使用者可以登入到auth_principals檔案配置了ROLE1或ROLE2角色的伺服器。
前面說了,可以對使用者證照進行登出。登出使用者需要用的使用者的序列號。建議同意維護一個使用者序列號的列表,或建立資料庫。
透過下面的命令生成一個登出證照檔案
ssh-keygen -k -f revoked-keys -u -s ca list-to-revoke
當已經有一個revoked-keys列表並想要更新證照時候(-u標誌)。
在list-to-revoke檔案內容由使用者名稱(IDS)或序列號(的-z生成期間標誌)是這樣的:
serial: 1 id: test.user
這將撤消對序列號為1的證照和所有ID為test.user的證照的訪問許可權。
為了使伺服器完成對撤銷金鑰配置,需要將生成的/更新的revoked keys檔案新增到/etc/ssh/revoked-keys並在/etc/ssh/sshd_config配置:
RevokedKeys /etc/ssh/revoked-keys
注意:請確保該revoked-keys檔案為可訪問且可讀,否則會導致任何使用者都不能訪問。
本文我們介紹了一個透過CA簽名使用者公鑰的證照統一管理方法。透過該方法可以實現基於角色透過ssh管理對伺服器的訪問。只需要配置伺服器一次(允許哪些角色訪問伺服器)。對於每個使用者,只需要生成一個簽名證照,就可以實現按角色登陸所有相關機器的方法。也可以方便登出使用者的證照,從而限制使用者的訪問。由於每個證照籤名都要有效性限制,即使未能及時登出使用者許可權,也可以在超過有效期後自動登出,從而保證了安全。
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2728722/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 蘋果ios簽名的公鑰與私鑰蘋果iOS
- 支付介面教程——公鑰與私鑰,雙鑰加密和數字簽名加密
- 公鑰加密、數字簽名、訊息認證加密
- TLS、SSL、CA 證書、公鑰、私鑰。。。今天捋一捋!TLS
- SSH 公鑰私鑰的生成管理
- iOS端基於RSA公鑰加密和解密iOS加密解密
- 3分鐘告訴你什麼是 非對稱加密、對稱加密、公鑰、私鑰、數字證書、數字簽名、資訊摘要、中間人攻擊、CA、根證書加密
- 基於雜湊函式的簽名,Part-1函式
- GPG 的基礎使用:交換公鑰
- WebAuthn預覽 – 基於公鑰的免密認證登入Web
- WebAuthn預覽 - 基於公鑰的免密認證登入Web
- 隱藏Android簽名檔案和金鑰資訊Android
- 金鑰,私鑰,公鑰的區分
- 電子簽名市場,CA、混合雲、SaaS三路混戰
- 基於node.js和oss的後端簽名直傳Node.js後端
- 基於HMAC-SHA1的RESTful API 授權簽名方法MacRESTAPI
- 公鑰和私鑰
- 公鑰基礎設施和密碼學中的私鑰的角色密碼學
- NW.js Mac App 簽名公證流程JSMacAPP
- php中的公鑰和私鑰PHP
- 實現HTTPS系列第二彈之【非對稱加密,公鑰私鑰,數字簽名,OpenSSL及HTTPS等概念簡介】HTTP加密
- 『現學現忘』Git基礎 — 11、配置Git使用者簽名的方式Git
- 使用者下載已簽名的軟體後 如何知道數字簽名是否可信
- 群簽名與環簽名的介紹
- 『現學現忘』Git基礎 — 12、Git使用者簽名(補充)Git
- openSSL生成公鑰和私鑰
- JavaSE 6基於JSR105的XML簽名之實踐篇JavaJSXML
- CA/B 論壇10月會議 S/MIME證書和程式碼簽名證書的新基線要求提上日程
- iOS簽名、iOS企業簽名、iOS超級簽名工具使用iOS
- 關於公關專案管理的基礎意識(轉)專案管理
- 『現學現忘』Git基礎 — 10、配置Git使用者簽名說明Git
- [網路/HTTPS/Java] PKI公鑰基礎設施體系、CA證書與認證工具(jre keytool / openssl)HTTPJava
- 基於Redis點陣圖實現使用者簽到功能Redis
- 生成 Git 公鑰Git
- 公鑰加密之外加密
- 蘋果企業簽名多少錢-ios企業簽名-企業簽名蘋果iOS
- 私鑰與公鑰有何不同?
- 01_私鑰、公鑰和地址