Solaris のシステム管理 (IP サービス)

IKE 作業

この節では、IPv4 アドレスを使用する 2 つのシステム間でトラフィックを保護する鍵を自動的に管理する手順について説明します。IKE 実装では、鍵の長さが異なるさまざまなアルゴリズムが提供されます。鍵の長さは、サイトのセキュリティに応じて選択します。一般的に、鍵の長さが長いほど、セキュリティが高くなります。

事前共有鍵による IKE の設定方法

  1. システムコンソールからスーパーユーザーになります。


    注 –

    リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システム全体のセキュリティがリモートログインセッションレベルに低下します。


  2. 正常に実行するために、システムごとに、グローバルパラメータと 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
    }

    注 –

    システム名は一例として使用しているだけです。システム間でトラフィックを保護する場合には、各自のシステムの名前とアドレスを使用してください。


  3. システムごとに、次のように指定してファイルが有効であるかどうかをチェックします。


    # /usr/lib/inet/in.iked -c -f /etc/inet/ike/config
    
  4. ランダム鍵を生成します。

    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
  5. システムごとに/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
    	}

    注 –

    事前共有鍵は同一にする必要があります。


  6. システムごとに、他のシステムのアドレスとホスト名を /etc/hosts ファイルに追加します。たとえば、次のように指定します。

    partym という名前のシステムでは、次のように指定します。


    # Secure communication with enigma 
    192.168.66.1 enigma

    enigma という名前のシステムでは、次のように指定します。


    # Secure communication with partym 
    192.168.55.2  partym
  7. 各システムごとに、次の行を追加して /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}
  8. 各システムをリブートすることで、セキュリティ保護された通信を可能にします。


    # /usr/sbin/reboot
    

既存の事前共有鍵を更新する方法

この手順では、既存の事前共有鍵を変更するものとします。3DES、AES、Blowfish などの強力な暗号化アルゴリズムを使用すると、両方のシステムのリブート時に備えて、鍵を変更するスケジュールを作成できる場合があります。この手順は、トラフィックの保護に DES などのアルゴリズムを使用するシステムに適用されます。

  1. システムコンソールからスーパーユーザーになります。


    注 –

    リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システム全体のセキュリティがリモートログインセッションレベルに低下します。


  2. ランダム鍵を生成してそれらのいずれか 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
  3. システムごとに /etc/inet/secret/ike.preshared ファイルを編集して、現在の鍵を新しい鍵に変更します。

    たとえば、enigma と partym のホストでは、key の値を be439533d50fec49c7fecf3c8f1391c0 のような新しい番号に変更します。

  4. in.iked デーモンがキー情報の変更を許可するかどうか確認します。


    # /usr/sbin/ikeadm get priv
    Current privilege level is 0x2, access to keying material enabled

    コマンドから 0x1 または 0x2 の権限レベルが戻された場合には、キー情報を変更できます。レベル 0x0 の場合には、キー情報を操作できません。デフォルトでは、in.iked デーモンは 0x0 の権限レベルで実行されます。

  5. in.iked デーモンを実行してキー情報を変更できるようにするには、ike.preshared ファイルの新しいバージョンを読み取ります。

    たとえば、次のように指定します。


    # ikeadm read preshared
    
  6. in.iked デーモンを実行してキー情報を変更できないようにするには、そのデーモンを消去してから再起動します。

    そのデーモンを開始すると、ike.preshared ファイルの新しいバージョンを読み取ります。

    たとえば、次のように指定します。


    # pkill in.iked
    # /usr/lib/inet/in.iked
    

新しい事前共有鍵を追加する方法

in.iked デーモンを実行するシステムでは、そのデーモンを呼び出した後に ipsecinit.conf ファイルに追加したインタフェースに対する事前共有鍵を追加できます。この手順では、両方のシステムの /etc/hosts ファイルと /etc/inet/ipsecinit.conf ファイルに新しいインタフェースをすでに追加し、各システムに ipsecinit.conf ファイルをまだ読み込んでいないものとします。

  1. システムコンソールからスーパーユーザーになります。


    注 –

    リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システム全体のセキュリティがリモートログインセッションレベルに低下します。


  2. in.iked デーモンがキー情報の変更を許可するかどうか確認します。


    # /usr/sbin/ikeadm get priv
    Current privilege level is 0x2, access to keying material enabled

    コマンドから 0x1 または 0x2 の権限レベルが戻された場合には、キー情報を変更できます。レベル 0x0 の場合には、キー情報を操作できません。デフォルトでは、in.iked デーモンは 0x0 の権限レベルで実行されます。

  3. in.iked デーモンを実行してキー情報を変更できないようにするには、そのデーモンを消去してから正確な権限レベルで開始します。

    たとえば、次のように指定します。


    # pkill in.iked
    # /usr/lib/inet/in.iked -p 2
    Setting priv/usr/lib/inet/in.iked -pilege level to 2!
  4. ランダム鍵を生成してそれらのいずれか 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
  5. 各システムで 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 コマンドに入力ミスがあったか、パラメータが省略されたことを示しています。コマンドを正確に再入力して鍵を追加してください。


  6. ikeadm コマンドモードを終了します。


    ikeadm> exit
    #
  7. システムごとに、in.iked デーモンの権限レベルを低くします。


    # ikeadm set priv base
    
  8. システムごとに、ipsecinit.conf ファイルを有効にして、追加したインタフェースを保護します。


    # ipsecconf -a /etc/inet/ipsecinit.conf
    

    注 –

    このコマンドの実行時には警告を読んでください。ソケットがすでに使用中 (ラッチされた) の場合には、システムへの背面ドアが保護されません。


自己署名付き公開証明書による IKE の設定方法

  1. システムコンソールからスーパーユーザーになります。


    注 –

    リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システム全体のセキュリティがリモートログインセッションレベルに低下します。


  2. 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-----
  3. その証明書を、通信するシステムの管理者に送信します。

    その証明書は、次のようにして電子メールにカット&ペーストできます。


    To: root@us.example.com
    From: root@un.example.com
    Message: -----BEGIN X509 CERTIFICATE-----
    MIICLTCCAZagAwIBAgIBATANBgkqhkiG9w0BAQQFADBNMQswCQYDVQQGEwJVUzEX
    …
    6sKTxpg4GP3GkQGcd0r1rhW/3yaWBkDwOdFCqEUyffzU
    -----END X509 CERTIFICATE-----
  4. /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 }
    }
  5. 次の手順を実行して、通信するシステムの公開鍵を追加します。

    1. 管理者の電子メールから公開鍵をコピーします。

    2. 次のように ikecert certdb -a コマンドと <Return> を入力します。


      # ikecert certdb -a <Return>
      
    3. 次のように公開鍵をペーストして <Return> と入力します。


      -----BEGIN X509 CERTIFICATE-----
      MIICL…
      …
      KgDid/nxWPlWQU5vMAiwJXfa0sw/A12w448JVkVmEWaf
      -----END X509 CERTIFICATE----- <Return>
      
    4. <Control-D> を入力して入力を終了します。


      <Control-D>
      
  6. 通信するシステムの管理者と一緒にキーが改ざんされていないことを確認します。

    たとえば、その管理者に電話で連絡して以下に示す公開鍵ハッシュの値を比較できます。


    # 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

    注 –

    上記の公開鍵ハッシュは、使用しているシステムで生成される公開鍵ハッシュとは異なります。


認証局による署名付き公開鍵による IKE の設定方法

  1. システムコンソールからスーパーユーザーになります。


    注 –

    リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システム全体のセキュリティがリモートログインセッションレベルに低下します。


  2. 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-----
  3. その要求を外部の認証局または PKI に依頼します。

    ベンダーは、各データベースに入力される 2 つの証明書と CRL を発行します。

    • 公開鍵証明書 – この証明書はベンダーに依頼した要求に基づいて作成されます。この証明書によって一意に識別されます。

    • 認証局 – ベンダーの署名です。CA によって公開鍵証明書が正規のものであることが確認されます。

    • 証明書無効リスト – ベンダーが無効にした証明書の最新リストです。

  4. ikecert コマンドで 3 つの証明書を引数として入力します。

    1. システムコンソールからスーパーユーザーになります。

    2. 次のように ikecert certdb -a コマンドと <Return> を入力します。


      # ikecert certdb -a <Return>
      
    3. 次のようにベンダーから受信した証明書をペーストして、 <Return> と入力します。


      -----BEGIN X509 CERTIFICATE-----
      …
      -----END X509 CERTIFICATE-----<Return>
      
    4. <Control-D> を入力して入力を終了します。


      <Control-D>
      
    5. 次のように ikecert certdb -a コマンドと <Return> を入力します。


      # ikecert certdb -a <Return>
      
    6. 次のようにベンダーの CA をペーストして <Return> と入力してから、<Control-D> と入力して入力を終了します。


      -----BEGIN X509 CERTIFICATE-----
      …
      -----END X509 CERTIFICATE-----<Return>
      <Control-D>
      
    7. 次のように ikecert certrldb -a コマンドと <Return> を入力します。


      # ikecert certrldb -a <Return>
      
    8. 次のようにベンダーの CRL をペーストして <Return> と入力してから、<Control-D> と入力して入力を終了します。

  5. /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 }
    }
  6. 今までと同じ操作を、通信するシステムでも実行します。

    上記の例に従って "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 を使用する場合には、ピアの証明書を公開鍵データベースに追加する必要があります。


証明書無効リストを更新する方法

  1. システムコンソールからスーパーユーザーになります。


    注 –

    リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システム全体のセキュリティがリモートログインセッションレベルに低下します。


  2. 無効となった証明書を抽出する方法については、ベンダーからの指示に従ってください。

  3. 次の手順を実行して、無効となった証明書を CRL データベースに追加します。

    1. ikecert certrldb -a コマンドと <Return> を入力します。


      # ikecert certrldb -a <Return>
      
    2. PKI ベンダーから無効となった証明書をペーストして <Return> と入力してから、<Control-D> と入力して入力を終了します。

  4. 無効リストにある CRL ごとにこの手順を繰り返します。