この節では、IPv4 アドレスを使用する 2 つのシステム間でトラフィックを保護する鍵を自動的に管理する手順について説明します。IKE 実装では、鍵の長さが異なるさまざまなアルゴリズムが提供されます。鍵の長さは、サイトのセキュリティに応じて選択します。一般的に、鍵の長さが長いほど、セキュリティが高くなります。
システムコンソールからスーパーユーザーになります。
リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システム全体のセキュリティがリモートログインセッションレベルに低下します。
正常に実行するために、システムごとに、グローバルパラメータと ipsecinit.conf の IPsec ポリシーを有効にする規則を指定して /etc/inet/ike/configファイルを作成します。たとえば、次のように指定します。
### ike/config file on enigma, 192.168.66.1 ## Global parameters # ## Phase 1 transform defaults p1_lifetime_secs 14400 p1_nonce_len 40 # ## Defaults that individual rules can override. p1_xform { auth_method preshared oakley_group 5 auth_alg sha encr_alg 3des } p2_pfs 2 # ## The rule to communicate with partym { label "Enigma-Partym" localid 192.168.66.1 remoteid 192.168.55.2 p1_xform { auth_method preshared oakley_group 5 auth_alg md5 encr_alg des } p2_pfs 5 } |
### ike/config file on partym, 192.168.55.2 ## Global Parameters # p1_lifetime_secs 14400 p1_nonce_len 40 # p1_xform { auth_method preshared oakley_group 5 auth_alg sha encr_alg 3des } p2_pfs 2 ## The rule to communicate with enigma { label "Partym-Enigma" localid 192.168.55.2 remoteid 192.168.66.1 p1_xform { auth_method preshared oakley_group 5 auth_alg md5 encr_alg des } p2_pfs 5 } |
システム名は一例として使用しているだけです。システム間でトラフィックを保護する場合には、各自のシステムの名前とアドレスを使用してください。
システムごとに、次のように指定してファイルが有効であるかどうかをチェックします。
# /usr/lib/inet/in.iked -c -f /etc/inet/ike/config |
Solaris システムでは、od コマンドを使用できます。たとえば、次のように指定します。
# od -x </dev/random | head -4 0000000 df97 6d2f 4ef5 2c28 02d5 02aa f9de 481d 0000020 2ae8 b949 67e6 b9b0 dd16 e6d4 b7ea 7278 0000040 ac07 7cc6 99c1 7055 848a 3cf3 4377 980a 0000060 5ad7 5b40 b428 9f3a da20 7daa 65a4 83fe |
システムごとに/etc/inet/secret/ike.preshared ファイルを作成し、各ファイルに事前共有鍵を書き込みます。
この例 (手順 2 を参照) では、暗号化アルゴリズムは DES であるため、事前共有鍵は少なくとも 64 ビットにする必要があります。 鍵の長さが長いほど、セキュリティが高くなります。たとえば、次のように指定します。
# ike.preshared on enigma, 192.168.66.1 { localidtype IP localid 192.168.66.1 remoteidtype IP remoteid 192.168.55.2 # enigma and partym's shared key in hex (128 bits) key ac077cc699c17055848a3cf34377980a } |
# ike.preshared on partym, 192.168.55.2 { localidtype IP localid 192.168.55.2 remoteidtype IP remoteid 192.168.66.1 # partym and enigma's shared key in hex (128 bits) key ac077cc699c17055848a3cf34377980a } |
事前共有鍵は同一にする必要があります。
システムごとに、他のシステムのアドレスとホスト名を /etc/hosts ファイルに追加します。たとえば、次のように指定します。
partym という名前のシステムでは、次のように指定します。
# Secure communication with enigma 192.168.66.1 enigma |
enigma という名前のシステムでは、次のように指定します。
# Secure communication with partym 192.168.55.2 partym |
各システムごとに、次の行を追加して /etc/inet/ipsecinit.conf ファイルを編集します。
enigma システムでは、次のように指定します。
{laddr enigma raddr partym} ipsec {auth_algs any sa shared} |
partym システムでは、次のように指定します。
{laddr partym raddr enigma} ipsec {auth_algs any sa shared} |
各システムをリブートすることで、セキュリティ保護された通信を可能にします。
# /usr/sbin/reboot |
この手順では、既存の事前共有鍵を変更するものとします。3DES、AES、Blowfish などの強力な暗号化アルゴリズムを使用すると、両方のシステムのリブート時に備えて、鍵を変更するスケジュールを作成できる場合があります。この手順は、トラフィックの保護に DES などのアルゴリズムを使用するシステムに適用されます。
リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システム全体のセキュリティがリモートログインセッションレベルに低下します。
ランダム鍵を生成してそれらのいずれか 1 つを選択します。
Solaris システムでは、od コマンドを使用できます。
# od -x </dev/random | head -2 0000000 305e c563 69ca 62c2 ae80 4690 c571 3e18 0000020 be43 9533 d50f ec49 c7fe cf3c 8f13 91c0 |
システムごとに /etc/inet/secret/ike.preshared ファイルを編集して、現在の鍵を新しい鍵に変更します。
たとえば、enigma と partym のホストでは、key の値を be439533d50fec49c7fecf3c8f1391c0 のような新しい番号に変更します。
in.iked デーモンがキー情報の変更を許可するかどうか確認します。
# /usr/sbin/ikeadm get priv Current privilege level is 0x2, access to keying material enabled |
コマンドから 0x1 または 0x2 の権限レベルが戻された場合には、キー情報を変更できます。レベル 0x0 の場合には、キー情報を操作できません。デフォルトでは、in.iked デーモンは 0x0 の権限レベルで実行されます。
in.iked デーモンを実行してキー情報を変更できるようにするには、ike.preshared ファイルの新しいバージョンを読み取ります。
たとえば、次のように指定します。
# ikeadm read preshared |
in.iked デーモンを実行してキー情報を変更できないようにするには、そのデーモンを消去してから再起動します。
そのデーモンを開始すると、ike.preshared ファイルの新しいバージョンを読み取ります。
# pkill in.iked # /usr/lib/inet/in.iked |
in.iked デーモンを実行するシステムでは、そのデーモンを呼び出した後に ipsecinit.conf ファイルに追加したインタフェースに対する事前共有鍵を追加できます。この手順では、両方のシステムの /etc/hosts ファイルと /etc/inet/ipsecinit.conf ファイルに新しいインタフェースをすでに追加し、各システムに ipsecinit.conf ファイルをまだ読み込んでいないものとします。
リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システム全体のセキュリティがリモートログインセッションレベルに低下します。
in.iked デーモンがキー情報の変更を許可するかどうか確認します。
# /usr/sbin/ikeadm get priv Current privilege level is 0x2, access to keying material enabled |
コマンドから 0x1 または 0x2 の権限レベルが戻された場合には、キー情報を変更できます。レベル 0x0 の場合には、キー情報を操作できません。デフォルトでは、in.iked デーモンは 0x0 の権限レベルで実行されます。
in.iked デーモンを実行してキー情報を変更できないようにするには、そのデーモンを消去してから正確な権限レベルで開始します。
たとえば、次のように指定します。
# pkill in.iked # /usr/lib/inet/in.iked -p 2 Setting priv/usr/lib/inet/in.iked -pilege level to 2! |
ランダム鍵を生成してそれらのいずれか 1 つを選択します。
Solaris システムでは、od コマンドを使用できます。
# od -x </dev/random | head -2 0000000 2d86 b6f6 eb7a e8a9 3d83 58b2 cd17 4164 0000020 8be4 fea4 b456 933a 46dd 149a 0a10 b2e4 |
各システムで ikeadm コマンドを入力して、新しいキー情報を追加します。
たとえば、enigma システムではホスト nemesis 192.163.55.8 のキーを次のように追加します。
# ikeadm ikeadm> add preshared { localidtype ip localid 192.168.66.1 remoteidtype ip remoteid 192.163.55.8 ike_mode main key 2d86b6f6eb7ae8a93d8358b2cd174164 } ikeadm: Successfully created new preshared key. |
ホスト nemesis では、管理者は次のように同一の鍵を追加します。
# ikeadm ikeadm> add preshared { localidtype ip localid 192.163.55.8 remoteidtype ip remoteid 192.168.66.1 ike_mode main key 2d86b6f6eb7ae8a93d8358b2cd174164 } ikeadm: Successfully created new preshared key. |
Error: invalid preshared key definition というメッセージは、add preshared コマンドに入力ミスがあったか、パラメータが省略されたことを示しています。コマンドを正確に再入力して鍵を追加してください。
ikeadm コマンドモードを終了します。
ikeadm> exit # |
システムごとに、in.iked デーモンの権限レベルを低くします。
# ikeadm set priv base |
システムごとに、ipsecinit.conf ファイルを有効にして、追加したインタフェースを保護します。
# ipsecconf -a /etc/inet/ipsecinit.conf |
このコマンドの実行時には警告を読んでください。ソケットがすでに使用中 (ラッチされた) の場合には、システムへの背面ドアが保護されません。
システムコンソールからスーパーユーザーになります。
リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システム全体のセキュリティがリモートログインセッションレベルに低下します。
ikecert certlocal -ks コマンドを使用して、自己署名付き証明書を ike.privatekeys データベースに追加します。たとえば、次のように指定します。
# ikecert certlocal -ks -m 1024 -t rsa-md5 \ -D "C=US, O=ExampleCompany, OU=US-Example, CN=Example" \ -A IP=192.168.10.242 Generating, please wait... Certificate: Certificate generated. Certificate added to database. -----BEGIN X509 CERTIFICATE----- MIICLTCCAZagAwIBAgIBATANBgkqhkiG9w0BAQQFADBNMQswCQYDVQQGEwJVUzEX … 6sKTxpg4GP3GkQGcd0r1rhW/3yaWBkDwOdFCqEUyffzU -----END X509 CERTIFICATE----- |
その証明書を、通信するシステムの管理者に送信します。
その証明書は、次のようにして電子メールにカット&ペーストできます。
To: root@us.example.com From: root@un.example.com Message: -----BEGIN X509 CERTIFICATE----- MIICLTCCAZagAwIBAgIBATANBgkqhkiG9w0BAQQFADBNMQswCQYDVQQGEwJVUzEX … 6sKTxpg4GP3GkQGcd0r1rhW/3yaWBkDwOdFCqEUyffzU -----END X509 CERTIFICATE----- |
/etc/inet/ike/config ファイルを編集して、通信するシステムからの公開鍵を認識します。 たとえば、次のように指定します。
# Explicitly trust the following self-signed certs # Use the Subject Alternate Name to identify the cert cert_trust "192.168.10.242" cert_trust "192.168.11.241" ## Parameters that may also show up in rules. p1_xform { auth_method preshared oakley_group 5 auth_alg sha encr_alg 3des } p2_pfs 5 { label "UN-Example to US-Example" local_id_type dn local_id "C=US, O=ExampleCompany, OU=UN-Example, CN=Example" remote_id_type dn remote_id "C=US, O=ExampleCompany, OU=US-Example, CN=Example" local_addr 192.168.10.242 remote_addr 192.168.11.241 p1_xform { auth_method rsa_encrypt oakley_group 2 auth_alg md5 encr_alg des } } |
通信するシステムの管理者と一緒にキーが改ざんされていないことを確認します。
たとえば、その管理者に電話で連絡して以下に示す公開鍵ハッシュの値を比較できます。
# ikecert certdb -l Certificate Slot Name: 0 Type: if-modn Subject Name: <C=US, O=ExampleCo, OU=UN-Example, CN=Example> Key Size: 1024 Public key hash: 2239A6A127F88EE0CB40F7C24A65B818 |
other system # ikecert certlocal -l Local ID Slot Name: 1 Type: if-modn Key Size: 1024 Public key hash: 2239A6A127F88EE0CB40F7C24A65B818 |
上記の公開鍵ハッシュは、使用しているシステムで生成される公開鍵ハッシュとは異なります。
システムコンソールからスーパーユーザーになります。
リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システム全体のセキュリティがリモートログインセッションレベルに低下します。
ikecert certlocal -kc コマンドを使用して、信頼されたルート証明書を ike.privatekeys データベースに追加します。
たとえば、次のように指定します。
# ikecert certlocal -kc -m 1024 -t rsa-md5 \ -D "C=US, O=ExampleCompany\, Inc., OU=US-Example, CN=Example" \ -A "DN=C=US, O=ExampleCompany\, Inc., OU=US-Example" Generating, please wait... Certificate request generated. -----BEGIN CERTIFICATE REQUEST----- MIIByjCCATMCAQAwUzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFEV4YW1wbGVDb21w … lcM+tw0ThRrfuJX9t/Qa1R/KxRlMA3zckO80mO9X -----END CERTIFICATE REQUEST----- |
その要求を外部の認証局または PKI に依頼します。
ベンダーは、各データベースに入力される 2 つの証明書と CRL を発行します。
公開鍵証明書 – この証明書はベンダーに依頼した要求に基づいて作成されます。この証明書によって一意に識別されます。
認証局 – ベンダーの署名です。CA によって公開鍵証明書が正規のものであることが確認されます。
証明書無効リスト – ベンダーが無効にした証明書の最新リストです。
ikecert コマンドで 3 つの証明書を引数として入力します。
システムコンソールからスーパーユーザーになります。
次のように ikecert certdb -a コマンドと <Return> を入力します。
# ikecert certdb -a <Return> |
次のようにベンダーから受信した証明書をペーストして、 <Return> と入力します。
-----BEGIN X509 CERTIFICATE----- … -----END X509 CERTIFICATE-----<Return> |
<Control-D> を入力して入力を終了します。
<Control-D> |
次のように ikecert certdb -a コマンドと <Return> を入力します。
# ikecert certdb -a <Return> |
次のようにベンダーの CA をペーストして <Return> と入力してから、<Control-D> と入力して入力を終了します。
-----BEGIN X509 CERTIFICATE----- … -----END X509 CERTIFICATE-----<Return> <Control-D> |
次のように ikecert certrldb -a コマンドと <Return> を入力します。
# ikecert certrldb -a <Return> |
次のようにベンダーの CRL をペーストして <Return> と入力してから、<Control-D> と入力して入力を終了します。
/etc/inet/ike/config ファイルを編集して、ベンダーを認識します。
ベンダーから利用するように通知された名前を使用します。たとえば、次のように指定します。
# Trusted root cert # This certificate is from Example PKI # This is the X.509 distinguished name for the CA that it issues. cert_root "C=US, O=ExamplePKI\, Inc., OU=PKI-Example, CN=Example PKI" ## Parameters that may also show up in rules. p1_xform { auth_method rsa_sig oakley_group 1 auth_alg sha1 encr_alg 3des } p2_pfs 2 { label "UN-Example to US-Example - Example PKI" local_id_type dn local_id "C=US, O=ExampleCompany, OU=UN-Example, CN=Example" remote_id_type dn remote_id "C=US, O=ExampleCompany, OU=US-Example, CN=Example" local_addr 192.168.10.242 remote_addr 192.168.11.241 p1_xform { auth_method rsa_encrypt oakley_group 2 auth_alg md5 encr_alg des } } |
今までと同じ操作を、通信するシステムでも実行します。
上記の例に従って "C=US, O=ExampleCompany, OU=US-Example, CN=Example" システムで ikecert コマンドを実行します。その ike.config ファイルでは、ローカルパラメータにはローカル情報、リモートパラメータには使用しているシステムの情報を使用します。
たとえば、次のように指定します。
# Trusted root cert # This certificate is from Example PKI cert_root "C=US, O=ExamplePKI\, Inc., OU=PKI-Example, CN=Example PKI" ## Parameters that may also show up in rules. p1_xform { auth_method rsa_sig oakley_group 1 auth_alg sha1 encr_alg 3des } p2_pfs 2 { label "US-Example to UN-Example - Example PKI" local_id_type dn local_id "C=US, O=ExampleCompany, OU=US-Example, CN=Example" remote_id_type dn remote_id "C=US, O=ExampleCompany, OU=UN-Example, CN=Example" local_addr 192.168.11.241 remote_addr 192.168.10.242 p1_xform { auth_method rsa_sig oakley_group 2 auth_alg md5 encr_alg des } } |
/etc/hosts ファイルと /etc/inet/ipsecinit.conf ファイルを変更して、保護されたインタフェースを組み込み、システムをリブートすると、IKE デーモンを実行して公開鍵と CA による IKE 自体の認証を行います。
RSA 暗号化認証方式により、IKE の ID が不正侵入者から保護されるため、IKE ではピアの証明書を検出しません。したがって、その方式では、IKE ピアが互いの公開鍵を認識することが必要になります。よって、ike.config ファイルの auth_method rsa_encrypt を使用する場合には、ピアの証明書を公開鍵データベースに追加する必要があります。