14.3.5. SSH 証明書の作成
証明書とは、署名された公開鍵です。ユーザーおよびホストの公開鍵を CA サーバーの秘密鍵で署名するために CA サーバーにコピーする必要があります。
重要
多くのキーを CA にコピーして署名すると、一意に名前が付けられていない場合は混乱が生じる可能性があります。デフォルト名が常に使用されると、コピーされる最新のキーによって、以前のコピーされたキーが上書きされます。これは、1 つの管理者に許容可能なメソッドである可能性があります。以下の例では、デフォルト名が使用されます。実稼働環境では、簡単に認識できる名前を使用することを検討してください。キーのコピー先となる管理ユーザーが所有する CA サーバーに、指定されたディレクトリーを設定することが推奨されます。これらのキーを
root
ユーザーの /etc/ssh/
ディレクトリーにコピーすることは推奨していません。以下の例では、key / という名前のディレクトリーを持つ admin
という名前
のアカウントが使用されます。
管理者アカウント(この例では
admin
)と、ユーザーのキーを受け取るディレクトリーを作成します。以下に例を示します。
~]$ mkdir keys
鍵をコピーできるようにパーミッションを設定します。
~]$ chmod o+w keys ls -la keys total 8 drwxrwxrwx. 2 admin admin 4096 May 22 16:17 . drwx------. 3 admin admin 4096 May 22 16:17 ..
14.3.5.1. ホストを認証する SSH 証明書の作成
ホスト証明書に署名するコマンドの形式は
ssh-keygen -s ca_host_key -I host_name -h ssh_host_rsa_key.pubになります。ホスト証明書の名前は
ssh_host_rsa_key-cert.pub
です。
手順14.4 ホスト証明書の生成
ユーザーへのホストを認証するには、ホストに公開鍵を生成し、CA で署名した CA サーバーに渡して、ホストへのログインを試行するユーザーに存在するようにホストに保存するために再度渡す必要があります。
- ホスト鍵は、システムで自動的に生成されます。一覧表示するには、以下のコマンドを入力します。
~]# ls -l /etc/ssh/ssh_host* -rw-------. 1 root root 668 May 6 14:38 /etc/ssh/ssh_host_dsa_key -rw-r--r--. 1 root root 590 May 6 14:38 /etc/ssh/ssh_host_dsa_key.pub -rw-------. 1 root root 963 May 6 14:38 /etc/ssh/ssh_host_key -rw-r--r--. 1 root root 627 May 6 14:38 /etc/ssh/ssh_host_key.pub -rw-------. 1 root root 1679 May 6 14:38 /etc/ssh/ssh_host_rsa_key -rw-r--r--. 1 root root 382 May 6 14:38 /etc/ssh/ssh_host_rsa_key.pub
- 選択した公開鍵を CA として指定されたサーバーにコピーします。たとえば、ホストからは以下のようになります。
~]# scp /etc/ssh/ssh_host_rsa_key.pub admin@ca-server.example.com:~/keys/ssh_host_rsa_key.pub The authenticity of host 'ca-server.example.com (10.34.74.58)' can't be established. RSA key fingerprint is b0:e5:ea:b8:75:e2:f0:b1:fe:5b:07:39:7f:58:64:d9. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'ca-server.example.com,10.34.74.58' (RSA) to the list of known hosts. admin@ca-server.example.com's password: ssh_host_rsa_key.pub 100% 382 0.4KB/s 00:00
または、CA から以下を行います。~]$ scp root@host_name.example.com:/etc/ssh/ssh_host_rsa_key.pub ~/keys/ssh_host_rsa_key.pub
- CA サーバーで、ホストの公開鍵に署名します。たとえば、
root
で以下を実行します。~]# ssh-keygen -s ~/.ssh/ca_host_key -I host_name -h -Z host_name.example.com -V -1d:+54w /home/admin/keys/ssh_host_rsa_key.pub Enter passphrase: Signed host key /home/admin/keys/ssh_host_rsa_key-cert.pub: id "host_name" serial 0 for host_name.example.com valid from 2015-05-26T12:21:54 to 2016-06-08T12:21:54
host_name は、証明書を必要とするシステムのホスト名です。 - 証明書をホストにコピーします。CA の場合の例を以下に示します。
~]# scp /home/admin/keys/ssh_host_rsa_key-cert.pub root@host_name.example.com:/etc/ssh/ root@host_name.example.com's password: ssh_host_rsa_key-cert.pub 100% 1384 1.5KB/s 00:00
- ユーザーがログインプロセスの開始時に証明書をユーザーのシステムに提示するようにホストを設定します。
root
で、/etc/ssh/sshd_config
ファイルを以下のように編集します。HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub
sshd
を再起動して、変更を有効にします。~]# service sshd restart
- ユーザーのシステムで、ユーザーが以前に設定したホストにログインしている場合は、
~/.ssh/known_hosts
ファイルからホストに属する鍵を削除します。ユーザーがホストにログインすると、ホストの信頼性についての警告が表示されなくなります。
クライアントシステムでホスト証明書をテストするには、手順14.3「ホスト署名キーの信頼」 の説明に従って、クライアントがグローバル
/etc/ssh/known_hosts
ファイルを設定しており、サーバーの公開鍵が ~/.ssh/known_hosts
ファイルにないことを確認します。次に、リモートユーザーとして SSH 経由でサーバーへのログインを試みます。ホストの信頼性についての警告は表示されません。必要な場合は SSH コマンドに -v
オプションを追加して、ロギング情報を確認します。