SSH認証のためにssh証明書を構成して、設定する方法


SSH公開鍵ベース認証は、組織のSSHアクセスセキュリティを潜在的に損なう可能性があるいくつかの欠点と操作上の課題を持っています.私たちは以前のブログで詳細について議論しました.Tightening SSH access using short-lived SSH certificates .
SSH証明書ベースの認証は、証明書とキー管理を単純化している間、これらのセキュリティ問題のほとんどを扱います.
この記事では、サーバーとクラウドリソースへのSSHアクセスのSSH証明書の設定と設定方法について説明します.

概要


ここでは、我々がこの記事で議論することについての概要です.
  • 我々は、2つのSSH証明書当局(CA)を作成するでしょう-ホストCAとユーザCAは、それぞれSSHホスト証明書とユーザ証明書に署名します.(注意:ユーザとホストの両方の証明書に署名するには、単一のCAを作ることができます.
  • これらのホストとユーザCASが発行する証明書を信頼するために、ホストとユーザマシンを設定する方法を示します.
  • 各ホストのSSHホスト証明書を作成し、ホストCAの秘密鍵を使って署名します.
  • 各ユーザーのSSHユーザー証明書を作成し、ユーザーCAの秘密キーを使用して署名します.
  • 最後に、SSH証明書ベース認証を使用する利点と欠点について説明します.
  • ステップ1 - CA証明書の作成


    CA証明書を作成する前に、SSHキーペアを使用する必要がありました.SSH KeyGenツールを使ってSSHキーペアを生成します.CAに指定されたサーバに以下のコマンドを実行します.

    ユーザCA SSHキーペア:


    # ssh-keygen -t rsa -b 4096 -f ~/.ssh/ssh_user_ca
    
    Generating public/private rsa key pair.
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/ssh_user_ca
    Your public key has been saved in /root/.ssh/ssh_user_ca.pub
    The key fingerprint is:
    SHA256:ShpCF11/fYjujAVDYivNKpNM6QdVwh8Z9sX00PIspdo 
    The key's randomart image is:
    +---[RSA 4096]----+
    |    .oooBo.o+.   |
    |     +o*o* .o=o. |
    |  . = ..+.= o*+ .|
    | . = o o.  =o o. |
    |  . B + S  oo.   |
    |   . B .  .=Z    |
    |    . .   . o    |
    |                 |
    |                 |
    +----[SHA256]-----+
    

    ホストCA SSHキーペア:


    # ssh-keygen -t rsa -b 4096 -f ~/.ssh/ssh_host_ca
    Generating public/private rsa key pair.
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/ssh_host_ca
    Your public key has been saved in /root/.ssh/ssh_host_ca.pub
    The key fingerprint is:
    SHA256:ShpCF11/fYjujAVDYivNKpNM6QdVwh8Z9sX00PIadsfj 
    The key's randomart image is:
    +---[RSA 4096]----+
    |    .oooBo.o+.   |
    |     +o*o* .o=o. |
    |  . = ..+.= o*+ .|
    | . = o o.  =o o. |
    |  . B + S  oo.   |
    |   . B .  .=F    |
    |    . .   . o    |
    |                 |
    |                 |
    +----[SHA256]-----+
    
    - Bフラグを使用してRSAタイプキーを要求しています、そして、- Bフラグを使用しているキー長は4096ビットです.長いキーは、それがクラックするのは難しい.
    秘密鍵にパスフレーズを提供することを強く推奨します.権限のないユーザーがパスフレーズなしで秘密鍵を保持するならば、彼らはあなたが関連した公開鍵で構成したどんなサーバにでもログインすることができます.
    上記のコマンドは、デフォルトでSSHペア-公開鍵と秘密キーを生成しました.あなたのホームディレクトリのsshフォルダ.例えば、/home/bob/.ssh/

    ステップ1 A - CAのホスト証明書に署名する


    さて、次のコマンドを使用して、ホストCAの証明書をホスト公開鍵を使って作成し、前のステップで生成された対応するホスト秘密キーを使用して署名しましょう.
    # ssh-keygen -s ~/.ssh/ssh_host_ca -I my-ca -h -n my-ca.example.com -V +52w ~/.ssh/ssh_host_ca.pub  
    
    - sは証明書に署名するのに使用するホスト秘密鍵を指定します.- hオプションはホスト型証明書を生成するために使用されます.
    上記の- nオプションは、ホストのFQDN(完全修飾ドメイン名)を証明書のプリンシパルとして設定します.
    vオプションは証明書の有効期間を設定します.
    上の例では、証明書は今日から有効になり、今から1年(52週間)経過します.
    証明書の詳細は次のコマンドを使用して確認できます.
    # ssh-keygen -Lf ~/.ssh/ssh_host_ca-cert.pub
    /root/.ssh/ssh_host_ca-cert.pub:
            Type: ssh-rsa host certificate
            Public key: RSA-CERT SHA256:7sCdBjn0...
            Signing CA: RSA SHA256:7sCdBjn0... (using rsa-sha2-512)
            Key ID: "my-ca"
            Serial: 0
            Valid: from 2022-02-12T10:09:00 to 2023-02-11T10:10:29
            Principals: 
                    my-ca.example.com
            Critical Options: (none)
            Extensions: (none)
    
    CAのホスト証明書を/etc/ssh/ CAサーバのフォルダ.

    ステップ2 - CA証明書を配布して、信頼すること


    ユーザCA証明書を組織内のすべてのホストにコピーする必要があります.これは、ホストがユーザ証明書の署名権限を信頼させることです.
    同様にホストCA証明書をすべてのユーザのマシンにコピーする必要があります.これは、ユーザのマシンのsshクライアントにホスト証明書の署名権限を信頼させることです.

    ステップ2 A -ホストを信頼するユーザCA証明書を作る


    # scp ~/.ssh/ssh_user_ca.pub [email protected]:/etc/ssh/
    
    SSHサーバの設定ファイルを/etc/ssh/sshd_config そして、TrustedUserCAKeys ユーザCA公開鍵(ユーザCA証明書ではない)をポイントするディレクティブ.
    TrustedUserCAKeys /etc/ssh/ssh_user_ca.pub
    
    ホストを再起動して設定変更を行います.
    # systemctl restart sshd
    

    ステップ2 b -クライアントをホストCA証明書を信頼させる


    このためには、ホストCA証明書の内容をコピーして、/etc/ssh/ssh_known_hosts ファイルを使う@cert-authority 以下に示す指示.
    # cat /etc/ssh/ssh_host_ca-cert.pub
    ssh-rsa AAAAHHNzaC1yc2EtY2....  [email protected]
    
    SSHグローバル設定ファイルにこのコンテンツをコピーしますssh_known_hosts すべてのユーザーシステムで.
    # nano /etc/ssh/ssh_known_hosts
    @cert-authority *.example.com ssh-rsa AAAAHHNzaC1yc2EtY2....  [email protected]
    
    The *.example.com 上記のワイルドカード・エントリは、ユーザー・システムによって、いかなるホストからも受信されるホスト証明書を信頼するように指示するexample.com ドメイン、ホストCAによって署名されます.
    ホストとユーザのCA証明書があるので、ホストとユーザマシンにSSH証明書を発行する準備ができました.最初にホスト証明書を発行する方法を見ましょう.

    ステップ3 - sshホスト証明書を作成する


    ホスト証明書を作成するには、SSHキーペアが必要です.を使っていつものように作成しましょうssh-keygen コマンド.証明書を必要とするホストマシンにログインし、以下のコマンドを実行します.
    # ssh-keygen -t rsa -b 4096 -f ~/.ssh/ssh_host
    
    上記のコマンドは公開鍵を生成するssh_host.pub ) と秘密鍵ssh_host ) 中で.ホームディレクトリのsshフォルダ/root/.ssh/ ).
    秘密鍵をホストシステム内で安全に保持する必要があります.他の場所にファイルをコピーしたり転送したりしないでください.
    以下のようにSCPコマンドを使ってホストの公開鍵をコピーします.
    # scp /root/.ssh/ssh_host.pub root@my-ca:/root/tmp/
    
    次に、ホスト公開鍵からホスト証明書を作成し、ホストCAの秘密キーを使用して証明書に署名します.
    # ssh-keygen -s ~/.ssh/ssh_host_ca -I [email protected] -h -n host1.example.com -V +52w /root/tmp/ssh_host.pub
    
    いったん署名し、ホストSSH証明書をコピーします.ssh_host-cert.pub ) SCPコマンドを使っているホストマシンに.パブリックオブジェクトであり、誰とでも共有できるので、SSH証明書をコピーするのは安全です.
    # scp /root/tmp/ssh_host-cert.pub  [email protected]:/etc/ssh/
    
    SSHクライアントからの接続に対して、署名されたホスト証明書を使用するようにホストを設定します.エディット/etc/ssh/sshd_config HOST証明書ディレクティブを設定し、次のようにホスト証明書を指定します
    # nano /etc/ssh/ssh_config
    …
    HostCertificate  /etc/ssh/ssh_host-cert.pub
    …
    
    最後に、設定変更のためにSSHサーバを再起動してください.
    # systemctl restart sshd
    

    Step 4 - SSHユーザ証明書の作成


    まず、ユーザ証明書のSSHキーペアを通常通り作成しましょう.
    # ssh-keygen -t rsa -b 4096 -f ~/.ssh/ssh_user
    
    次に、ユーザ公開鍵をCAサーバにコピーして署名します.
    # scp ~/.ssh/ssh_user.pub  /root/tmp/.
    
    CAサーバーにログインし、ユーザーCAの秘密キーを使用してユーザー証明書に署名します.
    # ssh-keygen -s ~/.ssh/ssh_user_ca -I [email protected]  -n root -V +4w /root/tmp/ssh_user.pub
    
    署名されたユーザ証明書をユーザーマシンに安全にコピーします.
    # scp /root/tmp/ssh_user-cert.pub [email protected]:~/.ssh/.
    
    次にsshクライアント設定ファイルを編集します./etc/ssh/ssh_config (グローバルな設定ファイル)あるいは~/.ssh/config ユーザーのホームディレクトリにファイル(ローカル設定ファイル)を追加し、次の行を追加します.これにより、SSHクライアントが認証中にユーザーの秘密キーファイルと証明書を自動的に拾うことができます.
    IdentityFile ~/.ssh/ssh_user
    
    注意IdentityFile ディレクティブは、ユーザーの秘密キーを指し、公開キーまたは証明書を指します.
    ユーザマシンからホストマシンにログインして、すべてが正しく設定されていることを確認し、うまく動作するようにしてください
    $ ssh [email protected]
    
    このホストの既存の公開鍵を~/.ssh/known_hosts ユーザマシンのファイル、必要に応じて、SSHクライアントがホストキーについて文句を言わないように変更しました.
    ホストの公開鍵~/.ssh/known_hosts ホスト証明書の署名を検証するためにホストCA証明書を使用するので、ファイルはSSH証明書ベースの認証には無関係です.

    SSH証明書ベースの認証を使用する利点

  • SSH証明書は有効期間を持っているので、ユーザとホスト証明書は将来いつか期限切れになります.
  • ユーザ証明書はすべてのホストマシンにコピーする必要はありません.
  • 短命のSSH証明書は、特権リソースにアクセスするためにユーザーに発行することができます.
  • SSHクライアントが初めてホストマシンにログインしたときに表示される、これ以上の奇妙なメッセージ(ホストキーの指紋の認識と受け入れについて).
  • セキュリティ妥協が検出されるとき、古いCAを無効にして、新しいCAをつくって、新しい証明書をホストとユーザーに発行してください.これは証明書回転と呼ばれます.
  • SSH証明書ベース認証を使用する欠点

  • 証明書は適切な計画と資源配分で定期的に回転させる必要がある
  • 短い寿命のユーザー証明書は、生産リソースへの特権アクセスに最適です.しかし、ユーザー証明書をより頻繁に発行して、それらをユーザマシンにコピーすることは、まだ面倒なプロセスです.
  • SocketXPバッティングソリューションとは


    SocketXP Bastion Host solution ビルトインCAで、自動化して、証明書作成、署名と配布プロセスを単純化してください.また、状況を保証するときに証明書を回転させる機能を自動化します.SocketXP BastionホストCAはまた、エンドユーザーにクラウドリソースまたはPREMサーバにアクセスするために、短命なユーザー証明書を発行します.また、ソリューションはシームレスにOpenSSHサーバーとクライアントと動作します.
    それで、特権ユーザーが組織を去るとき、あなたはあなたのホストマシンで公開鍵または証明書をきれいにする必要はありません.
    さらに、特権ユーザーの短命の証明書は、彼/彼女が仕事の最終日にオフィスを去る時までに期限切れになりました.
    SocketXP Bastionホストソリューションの詳細についてはこちらをご覧ください.
    https://www.socketxp.com/bashost