14.3.3. SSH CA 証明書署名キーの作成
2 種類の証明書が必要です。ホスト証明書とユーザー証明書です。2 つの証明書を署名するために別の 2 つの鍵(
ca_user_key
および ca_host_key
など)を使用することが適していますが、両方の証明書に署名するのに 1 つの CA キーのみを使用できます。また、別の鍵を使用する場合は手順を行う方が簡単なため、以下の例では別のキーを使用します。
ユーザー証明書を作成するためにユーザーの公開鍵に署名するコマンドの基本的なフォーマットは
ssh-keygen -s ca_user_key -I certificate_ID id_rsa.pubです。
-s
は、証明書の署名に使用される秘密鍵を示します。-I
は ID 文字列( certificate_ID )を示します。これは任意のアルファ数値値になります。これは、証明書にゼロ終端文字列として保存されます。certificate_ID は、証明書が識別に使用されるたびにログに記録され、証明書の取り消し時にも使用されます。長い値を設定すると、ログの読み取りが困難になります。そのため、ホスト証明書のホスト名とユーザー証明書のユーザー名を使用すると安全な選択肢になります。
ホストの公開鍵に署名してホスト証明書を作成するには、
-h
オプションを追加します。 ssh-keygen -s ca_host_key -I certificate_ID -h ssh_host_rsa_key.pub
ホストキーはデフォルトでシステムで生成され、キーを一覧表示するには、以下のようにコマンドを入力します。
~]# ls -l /etc/ssh/ssh_host*
-rw-------. 1 root root 668 Jul 9 2014 /etc/ssh/ssh_host_dsa_key
-rw-r--r--. 1 root root 590 Jul 9 2014 /etc/ssh/ssh_host_dsa_key.pub
-rw-------. 1 root root 963 Jul 9 2014 /etc/ssh/ssh_host_key
-rw-r--r--. 1 root root 627 Jul 9 2014 /etc/ssh/ssh_host_key.pub
-rw-------. 1 root root 1671 Jul 9 2014 /etc/ssh/ssh_host_rsa_key
-rw-r--r--. 1 root root 382 Jul 9 2014 /etc/ssh/ssh_host_rsa_key.pub
重要
CA 鍵を作成して、他の秘密鍵と同じように安全な場所に保存することが推奨されます。以下の例では、
root
ユーザーが使用されます。管理ユーザーアカウントを持つオフラインコンピューターを使用する実際の実稼働環境では、推奨しています。キーの長さに関するガイダンスは 『NIST Special Publication 800-131A』 を参照してください。
手順14.1 SSH CA 証明書署名鍵の生成
- CA として指定されたサーバーで、署名証明書で使用する鍵を 2 つ生成します。これらは、他のすべてのホストが信頼する必要のあるキーです。
ca_user_key
およびca_host_key
など、適切な名前を選択します。ユーザー証明書署名要求を生成するには、root
で以下のコマンドを入力します。~]# ssh-keygen -t rsa -f ~/.ssh/ca_user_key Generating public/private rsa key pair. Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/ca_user_key. Your public key has been saved in /root/.ssh/ca_user_key.pub. The key fingerprint is: 11:14:2f:32:fd:5d:f5:e4:7a:5a:d6:b6:a0:62:c9:1f root@host_name.example.com The key's randomart image is: +--[ RSA 2048]----+ | .+. o| | . o +.| | o + . . o| | o + . . ..| | S . ... *| | . . . .*.| | = E .. | | . o . | | . | +-----------------+
以下のように、ホスト証明書署名要求(ca_host_key
)を生成します。~]# ssh-keygen -t rsa -f ~/.ssh/ca_host_key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/ca_host_key. Your public key has been saved in /root/.ssh/ca_host_key.pub. The key fingerprint is: e4:d5:d1:4f:6b:fd:a2:e3:4e:5a:73:52:91:0b:b7:7a root@host_name.example.com The key's randomart image is: +--[ RSA 2048]----+ | .. | | . ....| | . . o +oo| | o . o *o| | S = .| | o. .| | *.E. | | +o= | | .oo. | +-----------------+
必要に応じて、パーミッションが正しいことを確認します。~]# ls -la ~/.ssh total 40 drwxrwxrwx. 2 root root 4096 May 22 13:18 . dr-xr-x---. 3 root root 4096 May 8 08:34 .. -rw-------. 1 root root 1743 May 22 13:15 ca_host_key -rw-r--r--. 1 root root 420 May 22 13:15 ca_host_key.pub -rw-------. 1 root root 1743 May 22 13:14 ca_user_key -rw-r--r--. 1 root root 420 May 22 13:14 ca_user_key.pub -rw-r--r--. 1 root root 854 May 8 05:55 known_hosts -r--------. 1 root root 1671 May 6 17:13 ssh_host_rsa -rw-r--r--. 1 root root 1370 May 7 14:30 ssh_host_rsa-cert.pub -rw-------. 1 root root 420 May 6 17:13 ssh_host_rsa.pub
- サーバーのホスト公開キーをホスト名、CA サーバーの完全修飾ドメイン名(FQDN)など、識別文字列と共に署名し、末尾の
.
. なしで CA サーバーの 完全修飾ドメイン名 (FQDN)を署名して、CA サーバー自体のホスト証明書を作成します。このコマンドは、ssh-keygen -s ~/.ssh/ca_host_key -I certificate_ID -h -Z host_name.example.com -V -start:+end /etc/ssh/ssh_host_rsa.pub
-Z オプションの形式を取ります。-Z
オプションは、この証明書をドメイン内の特定のホストに制限します。-V
オプションは有効期間を追加するため、強く推奨されます。有効期間は 1 年 5 週間にすることが意図されており、証明書を変更する時間と、証明書の有効期限が経過する期間などを考慮してください。以下に例を示します。~]# ssh-keygen -s ~/.ssh/ca_host_key -I host_name -h -Z host_name.example.com -V -1w:+54w5d /etc/ssh/ssh_host_rsa.pub Enter passphrase: Signed host key /root/.ssh/ssh_host_rsa-cert.pub: id "host_name" serial 0 for host_name.example.com valid from 2015-05-15T13:52:29 to 2016-06-08T13:52:29