はじめに
数十台から数百台規模のサーバを新規構築する場合や、SSL/TLS証明書を一斉に更新する場合、大量のCSR(Certificate Signing Request:証明書署名要求)を作成する必要があります。
CSRは各サーバのGUIなどから作成することもできますが、対象台数が多い場合、1台ずつ操作するのは非常に手間がかかります。
そこで今回は、F5 BIG-IPのtmsh(Traffic Management Shell)を使用して、秘密鍵とCSRを効率的に大量作成する方法を紹介します。
また、SAN(Subject Alternative Name:サブジェクト代替名)に複数のFQDNやIPアドレスを指定する方法についても解説します。
CSRの作成方法
BIG-IPでは、GUIからCSRを作成することもできますが、今回はCLIを使用します。
Tera Termなどのターミナルソフトを使用してBIG-IPへSSH接続し、tmshを起動します。
tmsh
CSRの作成は、以下の2段階で行います。
- 秘密鍵の作成
- 作成した秘密鍵を使用したCSRの作成
1. 秘密鍵の作成
まず、以下のコマンドで秘密鍵を作成します。
create sys crypto key test.key key-type rsa-private key-size 2048
このコマンドでは、test.keyという名前のRSA秘密鍵を新規作成します。
各パラメータの意味は以下のとおりです。
| パラメータ | 説明 |
|---|---|
create sys crypto key |
秘密鍵を作成するコマンド |
test.key |
作成する秘密鍵の名前 |
key-type rsa-private |
RSA形式の秘密鍵を指定 |
key-size 2048 |
RSA鍵長を2048bitに指定 |
なお、RSA鍵長は2048bit以外に4096bitなども指定できます。実際の運用では、認証局(CA)の要件や組織のセキュリティポリシーに従って選定してください。
2. CSRの作成
続いて、先ほど作成した秘密鍵を使用してCSRを作成します。
以下は、test.comというFQDNに対応するCSRを作成する例です。
create sys crypto csr test.csr common-name test.com organization "test co.ltd" ou "test department" city "minato-ku" state "Tokyo" country "JP" subject-alternative-name "DNS:test.com" key test.key
各パラメータの意味は以下のとおりです。
| パラメータ | 説明 |
|---|---|
create sys crypto csr |
CSRを作成するコマンド |
test.csr |
作成するCSRの名前 |
common-name |
Common Name(CN) |
organization |
組織名(O) |
ou |
部署名(OU) |
city |
市区町村名(L) |
state |
都道府県名(ST) |
country |
国コード(C)。日本の場合はJP |
subject-alternative-name |
SANに登録するFQDNやIPアドレス |
key |
CSRの作成に使用する秘密鍵 |
organizationやouなどにスペースを含む場合は、ダブルクォーテーション(")で囲みます。
なお、CSRに記載する組織情報や識別情報は、実際に証明書を発行する認証局の要件に合わせて設定してください。
SAN(Subject Alternative Name)について
現在の主要なWebブラウザでは、サーバ証明書のホスト名検証にSANが使用されます。
そのため、CSRを作成する際は、証明書を利用するFQDNやIPアドレスをSANに指定することが重要です。
SANには、主に以下の形式で値を指定します。
| 種別 | 指定例 | 用途 |
|---|---|---|
| DNS | DNS:test.com |
FQDNを指定 |
| DNS | DNS:www.test.com |
別のFQDNを指定 |
| IP | IP:10.1.1.1 |
IPアドレスを指定 |
例えば、以下のURLでWebサーバにアクセスする場合を考えます。
FQDNでアクセスする場合
https://test.com/
SANには以下を指定します。
DNS:test.com
IPアドレスでアクセスする場合
https://10.1.1.1/
SANには以下を指定します。
IP:10.1.1.1
IPアドレスを指定したCSRの作成コマンドは以下のとおりです。
create sys crypto csr test.csr common-name test.com organization "test co.ltd" ou "test department" city "minato-ku" state "Tokyo" country "JP" subject-alternative-name "IP:10.1.1.1" key test.key
※上記のFQDN用とIPアドレス用のコマンドは、それぞれ独立した作成例です。同じ名前のCSRを続けて新規作成するものではありません。
※10.1.1.1のようなプライベートIPアドレスを含む証明書は、社内CAなどのプライベート認証局での利用を想定しています。公的な認証局では発行できない場合があります。
SANに複数のFQDNやIPアドレスを指定する方法
1枚のサーバ証明書で複数のFQDNやIPアドレスに対応させたい場合は、SANに複数の値を指定します。
BIG-IPでは、subject-alternative-nameに対して、カンマ区切りで複数の値を設定できます。
複数のIPアドレスを指定する場合
例えば、以下の3つのIPアドレスをSANに登録する場合です。
- 10.1.1.1
- 10.1.1.2
- 10.1.1.3
コマンドは以下のとおりです。
create sys crypto csr test.csr common-name test.com organization "test co.ltd" ou "test department" city "minato-ku" state "Tokyo" country "JP" subject-alternative-name "IP:10.1.1.1,IP:10.1.1.2,IP:10.1.1.3" key test.key
複数のFQDNを指定する場合
以下の3つのFQDNをSANに登録する場合です。
- test.com
- www.test.com
- sub.test.com
コマンドは以下のとおりです。
create sys crypto csr test.csr common-name test.com organization "test co.ltd" ou "test department" city "minato-ku" state "Tokyo" country "JP" subject-alternative-name "DNS:test.com,DNS:www.test.com,DNS:sub.test.com" key test.key
FQDNとIPアドレスを混在させる場合
FQDNとIPアドレスを組み合わせて指定することもできます。
create sys crypto csr test.csr common-name test.com organization "test co.ltd" ou "test department" city "minato-ku" state "Tokyo" country "JP" subject-alternative-name "DNS:test.com,DNS:www.test.com,IP:10.1.1.1" key test.key
このように、DNS:とIP:を組み合わせて指定することで、1つのCSRに複数種類のSANを設定できます。
ただし、SANに登録できる名前やIPアドレスの数、組み合わせについては、認証局の制限や証明書の種類によって異なる場合があります。
作成した秘密鍵とCSRの確認
大量作成する場合は、コマンドを投入するだけでなく、正常にオブジェクトが作成されたことを確認する必要があります。
秘密鍵の確認
list sys crypto key test.key
CSRの確認
list sys crypto csr test.csr
CSRを名前付きで指定すると、CSRの情報やPEM形式の要求データを確認できます。
CSRの内容には、次のような区切り文字が含まれます。
-----BEGIN CERTIFICATE REQUEST-----
(CSRのデータ)
-----END CERTIFICATE REQUEST-----
認証局への申請時には、このCSRデータを使用します。
なお、CSRと秘密鍵は異なるものです。
CSRは認証局へ提出しますが、秘密鍵は原則として外部へ提出してはいけません。
また、証明書発行後に利用する秘密鍵は、CSR作成時に使用した秘密鍵と対応している必要があります。
大量にCSRを作成する場合の注意点
Excelなどを使用することで、秘密鍵とCSRを作成するコマンドを大量に生成できます。
例えば、100台分のCSRを作成する場合、秘密鍵作成コマンドとCSR作成コマンドを、それぞれ100行ずつ生成すれば効率的です。
ただし、コマンドの一括投入には注意が必要です。
コマンドの投入速度に注意
Tera Termなどを使用して大量のコマンドを一度に貼り付ける場合、BIG-IP側の処理が追いつかず、一部のコマンドが正常に実行されない可能性があります。
例えば、100行のコマンドを貼り付けたにもかかわらず、一部のコマンドが実行されず、期待した数の秘密鍵やCSRが作成されない、といった事象が発生する場合があります。
対策:Tera Termの送信間隔を調整する
Tera Termには、送信するデータの間隔を調整する機能があります。
大量のコマンドを投入する場合は、改行後の送信遅延などを調整することで、BIG-IP側の処理負荷を考慮した投入が可能です。
例えば、コマンド間に1000ms(1秒)の間隔を設ける方法があります。
ただし、1000msはあくまで設定例であり、すべての環境で正常な実行を保証するものではありません。
実際の運用では、少量のコマンドで事前検証を行い、必要に応じて送信間隔を調整してください。
作成結果を必ず確認する
一括投入が完了した後は、秘密鍵とCSRが期待した数だけ作成されているかを確認します。
秘密鍵の一覧確認:
list sys crypto key
CSRの一覧確認:
list sys crypto csr
特に大量作成する場合は、以下を確認することを推奨します。
- 作成予定の秘密鍵とCSRがすべて存在すること
- CSRの名前に重複や誤りがないこと
- 各CSRが意図した秘密鍵を参照していること
- CNやSANに設定ミスがないこと
- コマンド実行時にエラーが発生していないこと
なお、CSRごとに異なる秘密鍵を発行する場合は、秘密鍵の名前も重複しないようにしてください。
また、秘密鍵は重要な認証情報です。アクセス制御やバックアップ、証明書発行後の保管・削除方針についても、組織のセキュリティポリシーに従って管理してください。
まとめ
BIG-IPのtmshを使用することで、GUIから1件ずつ作成することなく、秘密鍵とCSRを効率的に作成できます。
特に、大量のサーバ証明書を発行・更新する場合には、Excelなどで作成コマンドを生成し、CLIからまとめて投入する方法が有効です。
今回のポイントは以下のとおりです。
-
create sys crypto keyで秘密鍵を作成する -
create sys crypto csrでCSRを作成する -
subject-alternative-nameでSANを指定する - 複数のSANはカンマ区切りで指定できる
- 大量投入する場合はコマンドの送信間隔に注意する
- 作成完了後は秘密鍵とCSRの内容を必ず確認する
大量の証明書を管理する環境では、単純なコマンド投入だけでなく、投入結果の検証まで含めて手順を整備しておくと、作業ミスの削減につながります。