%20%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%20%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%81%AE%20SSH%20%E3%82%AD%E3%83%BC%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%E3%80%82.png)
自分自身の証明機関 (CA) になる方法についてのチュートリアルをたくさん見てきました。私が見たチュートリアルは、ssh キーではなく ssl キーを生成する方法についてのものだったので、Ubuntu Server 14.04 LTS でそのような ssh キーを生成するにはどうしたらよいか疑問に思いました。この方法を使用する理由は、ssh キーをより適切に管理し、会社を辞めた場合にそのサーバーにアクセスできないようにキーを取り消すことができるようにするためです。
答え1
できません。SSH は、キーがまだ有効かどうかを確認するために CRL または類似のものを参照しません。会社を辞める人のサーバーへのアクセスを簡単に削除できるようにしたい場合は、次の 2 つのオプションが考えられます。
- キーを直接管理するのではなく、Puppet などを介して管理します (これは、ファイルへの個々のキーの追加と削除を直接サポートします
authorized_keys
)。こうすることで、SSH キーを追加または削除する必要がある場所は 1 つだけになり、Puppet によってすべてのホストで変更がアクティブ化されます。 - 完全に無効にして
PubKeyAuthentication
、中央認証システムを持つ他の認証に切り替えます (たとえば、Kerberos はパスワードなしの認証を許可し、中央認証データベースを備えていますが、初心者にとっては設定がやや複雑です)。
答え2
OpenSSH はバージョン 5.4 以降、独自の実際の証明書を持っています。X509 証明書よりも構造がシンプルですが、機能はほぼ同じです。
通常のSSHキーペアを作成し、CAとして使用します。ホストCAとユーザーCAを1つずつ作成するのが理想的です。その後、ssh-keygenを使用してこのCAで公開鍵に署名できます。たとえば、
ssh-keygen -s /path/to/ca_key -I key_id -z serial \
-n principal1,principal2 -V +53w /path/to/user_key.pub
このコマンドは、user_key-cert.pub というファイルを作成します。これがあなたの証明書になります。この証明書は 53 週間有効で、キーに署名した CA を信頼する任意のホストで、principal1 および principal2 としてログインするために使用できます。
sshdにこのCAを信頼するように指示するには、次のようにsshd_configのca_key.pubを参照するだけです。
TrustedUserCAKeys /etc/ssh/ca_key.pub
SSH 証明書を取り消す方法もいくつかあり (実際の質問)、これらは openssh のマニュアルに記載されています。ただし、sshd_config の基本オプションは RevokedKeys です。これには、テキスト ファイルとバイナリ KRL の両方を使用できます。
詳細については、SSH CAに関するガイドをいくつか書いています。 https://framkant.org/2016/10/setting-up-a-ssh-certificate-authority-ca/
よりきめ細かくスケーラブルなアクセス制御については、以下をご覧ください。 https://framkant.org/2017/07/scalable-access-control-using-openssh-certificates/