web-dev-qa-db-ja.com

CA署名のsshキーの場合、さまざまな属性を確認する方法:プリンシパル、ID、シリアル番号、オプション、有効期間など

記事 SSHを使用したスケーラブルで安全なアクセス で説明されているように、CA署名付きの公開sshキーを使用してアクセス制御を実装したいと考えています。

セキュリティチームがCA側でこれを管理する方法を考えています。私ができることの1つは、キーに署名した後、そのキーを「クエリ」して、そのキーに関する情報を取得することです。特に、特定のキーについて、知りたいのですが。

  • 署名されたCAは何ですか(つまり、この鍵の署名に使用された証明書に関する情報を抽出できますか)?
  • このキーに割り当てられているidentity-I ssh-keygenへのフラグ)
  • このキーで許可されるプリンシパル(-n ssh-keygenフラグ)
  • 署名の有効期間は何ですか(-V
  • この署名のシリアル番号は何ですか(-z
  • この署名済みキーに割り当てられているオプション(-O

明らかに、sshdは、キーが提示されたときにこれらの属性をすべてデコードする必要があります。その情報を抽出するプログラム的な方法はありますか?セキュリティチームの管理側での健全性チェック、監査、報告について考えています。

編集:この投稿で誤った用語を使用していることに気付きました。 ssh-keygenのマンページから(私の強調):

ssh-keygenは、ユーザーまたはホスト認証に使用できるcertificatesを生成するための鍵の署名をサポートしています。 証明書は、公開鍵、いくつかの識別情報、0個以上のプリンシパル(ユーザーまたはホスト)で構成されています名前とオプションのセット...

アブラハムが以下に言及するように、キーは実際には単なるキーです。キーがCAによって署名されると、キーは単なるキーではなく、証明書になります。

最後に、RTFM Failの驚くべき表示では、ssh-keygen -L -f certificateは私が必要としていることを正確に行います。

2
Matt

Gravitationalの私のコホートは、SSH証明書を解析してオンラインで実行する純粋なgolangツールを作成しました: https://ssh-certificate-parser.gravitational.com/ 署名されたSSH証明書の解析について質問がある場合ツールが証明書内で利用可能なすべてのデータを出力すると信じています。

1

ssh-keygen -L -f <cert-file>実際の証明書ファイルがディスク上にある場合、一時的なSSH証明書のみがssh-agentに読み込まれていて、ディスク上の証明書ファイル:

ssh-add -l | ssh-keygen -L

ところで、「キー」と「証明書」という用語の混同は、おそらくOpenSSH証明書が新しいOpenSSHキータイプとして定義されているためです([email protected]など)。

仕様も参照してください: PROTOCOL.certkeys

0