SSH + 證書頒發機構伺服器?
是否可以設置 SSH(例如通過 pam)來檢查連接客戶端的公鑰與 CA 伺服器?我嘗試過使用 gnupg (via
gpg-agent --daemon --enable-ssh-support
),也嘗試過使用 OpenCA,這被證明是安裝的一個挑戰。此外,當涉及到這兩個方面時,文件都是可怕的。我想要完成的事情是:
$$ Client $$–SSH–> “伺服器” <—>$$ CA Server $$
整個平台是基於 *nix 的,我現在對建議持開放態度,因為我已經堅持了一段時間了。
GnuPG
我已經按照這些指南盡可能簡單地進行了設置:
- http://www.bootc.net/archives/2013/06/09/my-perfect-gnupg-ssh-agent-setup/
- https://wiki.archlinux.org/index.php/GnuPG
我最初的想法是建立我自己的“密鑰伺服器”,它
gpg
可以發送和檢查密鑰,但是沒有關於這個的資訊(或者至少我找不到)。據我了解,我應該能夠
ssh-add -l
列出我所有的密鑰,但這給了我:The agent has no identities.
這並不奇怪,因為我從未指定在哪裡獲取它們,但“它應該可以工作”(…?) .gpg.conf看起來像:
... lots of default ... personal-digest-preferences SHA512 cert-digest-algo SHA512 default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed homedir /etc/gnupg use-agent
和我的gpg-agent.conf:
pinentry-program /usr/bin/pinentry-curses default-cache-ttl 10800 default-cache-ttl-ssh 10800 write-env-file /etc/gnupg/.gpg-agent-info enable-ssh-support
只是為了驗證我確實有一個密鑰並且 gpg 正在響應:
~]# gpg --list-keys /etc/gnupg/pubring.gpg ---------------------- pub 4096R/#######2 2013-12-10 [expired: 2014-12-10] uid Anton (...) <mail> sub 4096R/#######5 2013-12-10 [expires: 2014-12-10]
開放CA
當一切都準備就緒並開始時,我進入了一個網站,上面說我的“對稱密鑰長度太短”,我無法超越。
我知道這是一個非常古老的問題。但是,您的問題有兩個答案。
讓 GPG 與 SSH 一起工作。
您已經完成了第一步,在 gpg-agent.conf 中啟用了 ssh-support
但是,您沒有提供任何要使用的 PGP 密鑰。為了在 ssh 中使用 PGP 密鑰,您必須以 ssh 格式導出公鑰並將其添加到遠端主機的 ~/.ssh/authorized_keys 文件中。然後將私鑰的 keygrip 添加到文件 ~/.gnupg/sshcontrol 中。
要將 PGP 公鑰導出為 ssh:
$gpg -a --export-ssh-key [keyid]
查看 PGP 密鑰: $gpg –with-keygrip –list-secret-keys
$$ keyid $$ 我通常會創建一個適合與 SSH 一起使用的子密鑰。如果您使用的是 GPG 2.2.1,那麼您甚至可以使用 ED25519。
$gpg --expert --edit-key [keyid] gpg> addkey Option 11 for ECC Option A to add authentication Option 1 for Curve 25519 Expire never Create yes gpg> save
然後只導出身份驗證子密鑰:
$gpg -a --export-ssh-key [auth subkeyid]!
驚嘆號僅選擇指示的子項。
您還需要確保在 ~/.bashrc 中設置了環境變數…如果您正在執行 Xwindow 客戶端,這通常通過 /etc//X11/Xsession.d/90gpg-agent 為您完成以下 bash 腳本:
agent_sock=$(gpgconf --list-dirs agent-socket) export GPG_AGENT_INFO=${agent_sock}:0:1 if [ -n "$(gpgconf --list-options gpg-agent | \ awk -F: '/^enable-ssh-support:/{ print $10 }')" ]; then export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket) fi
一旦您確保設置了環境變數,當您列出可用身份時,添加到 ~/.gnupg/sshcontrol 文件中的任何 keygrip 都將顯示為 ssh-agent 中的身份驗證密鑰:
$ssh-add -l
請注意,您可以通過 -E 選項更改顯示的雜湊以顯示 MD5 或 SHA256。
配置 SSH 以使用證書
這是一個相當複雜的問題。Red Hat 在這裡有一個詳細的演練:
結尾
目前還不清楚是否可以使用 PGP 密鑰作為 SSH CA 密鑰。我自己沒試過。但是,我確實在客戶端使用 PGP 密鑰。我發現與使用 ssh-genkey 生成的密鑰相比,它使生活變得非常輕鬆,並且管理 SSH 身份也不那麼麻煩。