Go to main content
Oracle® Solaris 11.3 での FIPS 140-2 対応システムの使用

印刷ビューの終了

更新: 2017 年 3 月
 
 

Oracle Solaris 11.3 SRU 5.6 システム上で FIPS 140-2 モードで実行する例

このセクションの例では、Apache HTTP Server Version 2.4 を FIPS 140-2 モードで実行するように Oracle Solaris システムを構成します。システムは SPARC T5-2 サーバーであり、これにより SPARC5 プロセッサでの暗号化アクセラレーションが提供されます。

    主な手順は次のとおりです。

  1. FIPS 140-2 レベル 1 を構成する BE を作成し、そこにブートします。

  2. 新しい BE で、FIPS 140-2 プロバイダを有効にします。

  3. FIPS 140-2 モードで 2 つのコンシューマ SunSSH と Apache HTTP Server Version 2.4 を有効にします。

  4. policy.conf ファイルを変更して、FIPS 140-2 パスワードハッシュを使用しないシステムとの相互運用性を削除します。

  5. FIPS 140-2 BE にブートします。

  6. テストします。

次の例では、この構成を実現するために実行する詳細なアクションについて説明します。

  1. 現在の構成に基づいて BE を作成し、それをブートします。

    # beadm create S11.3-FIPS-140
    # beadm activate S11.3-FIPS-140
    # reboot
  2. 新しい BE で、暗号化フレームワークでの FIPS 140-2 モードを有効にします。

    # cryptoadm enable fips-140

    fips-140 パッケージがまだロードされていない場合は、このコマンドでそのパッケージもロードされます。

  3. OpenSSL の FIPS 140-2 モードバージョンを有効にします。

    1. OpenSSL の FIPS 140-2 モードバージョンがシステム上に存在することを確認します。

      # pkg mediator -a openssl
      MEDIATOR     VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION
      openssl      vendor            vendor     default
      openssl      system            system     fips-140

      Caution

      注意  -  OpenSSL モジュールに切り替えようとしたときに、そのモジュールがシステム上に存在しないと、システムを使用できなくなる可能性があります。


    2. FIPS 140-2 OpenSSL プロバイダを有効にします。

      # pkg set-mediator -I fips-140 openssl
  4. SunSSH コンシューマを構成し、FIPS 140-2 モードで有効にします。


    注 -  OpenSSH を Oracle Solaris 上で FIPS 140-2 モードで動作するように構成することはできません。
    1. FIPS 140-2 モードを使用するには、sshd_config および ssh_config ファイルの最後に次の情報を追加します。

      # pfedit /etc/ssh/sshd_config /etc/ssh/ssh_config
      ## This system operates in FIPS 140 mode. SSH in FIPS 140 mode cannot
      ## use the OpenSSL engine. UseOpenSSLEngine yes has no effect.
      UseFIPS140 yes
      UseOpenSSLEngine no
    2. FIPS 140-2 モードで SunSSH で使用する PKCS #8 形式の非公開鍵を生成します。

      Oracle Solaris 11 上で Secure Shell のための X.509 を設定する方法 (http://www.oracle.com/technetwork/articles/servers-storage-admin/howto-setup-x509-sunssh-1929594.html)の手順に従います。次に、ssh-keygen コマンドを使用して非公開鍵を作成します。

      ssh-keygen コマンドを使用する場合、デフォルトの鍵の長さは 1024 であり、これは検証された長さではありません。–b オプションを使用して、有効な鍵の長さを指定する必要があります。

  5. FIPS 140-2 モードで Apache HTTP Server を構成します。

    1. 検証された鍵の長さで FIPS 140-2 アルゴリズムを使用して、Web サーバー証明書を生成します。

      たとえば、pktool コマンドを使用し、2048 ビットの RSA 鍵と SHA-384 ハッシュを指定します。

      # pktool gencert keystore=pkcs11 \
      > label=fipskey \
      > subject "/C=CTRY/ST=County area/L=City/CN=`hostname`" \
      > keytype=rsa hash=sha384 keylen=2048 \
      > serial 0xnnnnnnnn
    2. ssl.conf 構成ファイルを作成します。

      # cp /etc/apache2/2.4/samples-conf.d/ssl.conf /etc/apache2/2.4/conf.d/
    3. わかりやすくするために、FIPS 140-2 モードでの OpenSSL の使用についてコメントします。

      # pfedit /etc/apache2/2.4/conf.d/ssl.conf
      ## In Oracle Solaris 11.3, the OpenSSL
      ## module is FIPS 140-2 validated.
      SSLCryptoDevice builtin

      注 - Apache HTTP Server Version 2.2 を構成していた場合、SSLCryptoDevice の値は pkcs11 になります。
    4. その他の鍵情報がサイトポリシーに対して正しく構成されていることを確認します。

      # grep ^SSLCipherSuite /etc/apache2/2.4/conf.d/ssl.conf
      SSLCipherSuite AES256-SHA:AES128-SHA
      # grep ^SSLHonorCipherOrder /etc/apache2/2.4/conf.d/ssl.conf
      SSLHonorCipherOrder on
    5. Web サーバーのサイト構成を完了します。

      たとえば、SSL プロトコルバージョンを指定します。

      # grep ^SSLProtocol /etc/apache2/2.4/conf.d/ssl.conf
      SSLProtocol all -SSLv2 -SSLv3
  6. 許容可能なハッシュとして 2a を削除することにより、FIPS 140-2 以外のパスワードハッシュが使用されないようにします。

    # pfedit /etc/security/policy.conf
    CRYPT_ALGORITHMS_ALLOW=5,6
  7. (オプション) すべてのログインが正しいハッシュを使用することを確認します。

    1. この BE にログインできるすべてのユーザーを一覧表示します。

      # logins -xo -S files | grep PS 
      root:0:root:0:Super-User:/root:/usr/bin/bash:PS ...
      testuser1:111:test:110:Tester1:/home/tester1:/usr/bin/bash:PS ...
      testuser2:112:test:110:Tester2:/home/tester2:/usr/bin/bash:PS ...
      admin:141:fipadm:140:FIPS 140 Administrator:/home/admin:/usr/bin/bash:PS ...

      ヒント  -  LDAP リポジトリ内のすべてのユーザーを検索するには、–S ldap オプションを使用します。
    2. 各ユーザーにログイン時に新しいパスワードを強制的に作成させます。

      # passwd -f [-r files | ldap ] username

      ヒント  -  すべてのユーザーにログイン時にパスワードを強制的に変更させるスクリプトを記述できます。
  8. コンシューマが構成されたら、BE をリブートします。

    # reboot
  9. 構成をテストします。

    • プロバイダが FIPS 140-2 モードで動作していることを確認します。

      次の出力は、暗号化フレームワークが FIPS 140-2 モードで動作していることを示します。

      # cryptoadm list fips-140
      User-level providers:
      ===================== 
      /usr/lib/security/$ISA/pkcs11_softtoken: FIPS 140 mode is enabled.
      
      Kernel providers:
      ================= 
      des: FIPS 140 mode is enabled.
      aes: FIPS 140 mode is enabled.
      ecc: FIPS 140 mode is enabled.
      sha1: FIPS 140 mode is enabled.
      sha2: FIPS 140 mode is enabled.
      rsa: FIPS 140 mode is enabled. 
      swrand: FIPS 140 mode is enabled.
      
      Kernel hardware providers:
      =========================:
      n2rng: FIPS 140 mode is enabled.

      次の出力は、OpenSSL が FIPS 140-2 モードで動作していることを示します。

      # pkg mediator openssl
      MEDIATOR VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION
      openssl      system             system  fips-140
    • Apache HTTP Server の暗号化の使用をトレースします。

      1. 端末ウィンドウで、Apache HTTP Server Version 2.4 プロセス上の OpenSSL 暗号化呼び出しをトレースします。

        # truss -w \!all -t \!all -v \!all \
          -u libcrypto::FIPS_evp_\* \
          -f /usr/apache2/2.4/bin/httpd -k start

        注 -  このコマンドは、/usr/lib/libcrypto.so.1 ライブラリへの FIPS 140-2 エンベロープ (evp) 関数呼び出しをトレースします。
      2. Web サーバー要求を送信し、その出力で FIPS 140-2 エンベロープの使用を確認します。

        # openssl s_client -connect localhost:443 -tls1
        ...
        GET / HTTP/1.0
        ...
        8358/1@1: -> libcrypto:FIPS_evp_sha1()
        8358/1@1: <- libcrypto:FIPS_evp_sha1() = 0xf94984b8
        8358/1@1: -> libcrypto:FIPS_evp_aes_128_cbc()
        8358/1@1: <- libcrypto:FIPS_evp_aes_128_cbc() = 0xf94980d8
        ...
    • FIPS 140-2 以外のシステムと FIPS 140-2 システムから Secure Shell ログインをテストします。

    • ログファイルで Secure Shell と Apache HTTP Server にエラーがないか確認します。

      FIPS 140-2 アルゴリズムが使用されていない場合、Secure Shell はエラーを返します。

  10. (オプション) FIPS 140-2 以外のアルゴリズムがすべての暗号化フレームワークコンシューマで使用されないようにするには、FIPS 140-2 以外のメカニズムを無効にします。


    ヒント  -  暗号化フレームワークコンシューマの厳格なポリシーを実装するには、そのポリシーを実装するスクリプトを作成してから、FIPS 140-2 モードの厳格なポリシーバージョンのための 2 番目の BE を作成します。

    次の一連のコマンドにより、FIPS 140-2 モードで検証されていないカーネルアルゴリズムが使用されなくなります。

    # cryptoadm -vm/** 短縮リストには、非 FIPS 140 アルゴリズムのメカニズムのみが表示されます **/
    ...
    Kernel providers:
    =================
    des: CKM_DES_ECB,CKM_DES_CBC,CKM_DES3_ECB,CKM_DES3_CBC
    arcfour: CKM_RC4
    blowfish: CKM_BLOWFISH_ECB,CKM_BLOWFISH_CBC
    camellia: CKM_CAMELLIA_ECB,CKM_CAMELLIA_CTR,CKM_CAMELLIA_CBC
    md4: CKM_MD4
    md5: CKM_MD5,CKM_MD5_HMAC,CKM_MD5_HMAC_GENERAL
    # cryptoadm disable provider=des mechanism=CKM_DES_ECB,CKM_DES_CBC
    # cryptoadm disable provider=arcfour mechanism=all
    # cryptoadm disable provider=blowfish mechanism=all
    # cryptoadm disable provider=camellia mechanism=all
    # cryptoadm disable provider=md4 mechanism=all
    # cryptoadm disable provider=md5 mechanism=all

    次のコマンドは、FIPS 140-2 以外のメカニズムを無効にしたあとのカーネル暗号化フレームワークプロバイダのポリシーを表示します。

    # cryptoadm list -p
    ...
    des: all mechanisms are enabled, except CKM_DES_CBC,CKM_DES_ECB.
    aes: all mechanisms are enabled.
    arcfour: no mechanisms presented.
    blowfish: all mechanisms are enabled, except CKM_BLOWFISH_ECB,CKM_BLOWFISH_CBC.
    camellia: all mechanisms are enabled, except CKM_CAMELLIA_ECB,CKM_CAMELLIA_CTR,CKM_CAMELLIA_CBC.
    ecc: all mechanisms are enabled.
    sha1: all mechanisms are enabled.
    sha2: all mechanisms are enabled.
    md4: no mechanisms presented.
    md5: all mechanisms are enabled, except CKM_MD5,CKM_MD5_HMAC,CKM_MD5_HMAC_GENERAL.
    rsa: all mechanisms are enabled.
    swrand: random is enabled.

    ユーザーランドメカニズムが使用されないようにするには、プロバイダとして /usr/lib/security/$ISA/pkcs11_softtoken.so を指定したあと、それらのメカニズムを指定します。ユーザーランドのメカニズムを一覧表示するには、次のコマンドを使用します。

    # cryptoadm list -vm provider=/usr/lib/security/\$ISA/pkcs11_softtoken.so
    Mechanism Name                 Minimum    Maximum  ...
    ----------------------------- -------- ----------  ...
    CKM_CAMELLIA_CBC                    16         32  ...
    CKM_CAMELLIA_CBC_PAD                16         32  ...
    CKM_CAMELLIA_CTR                    16         32  ...
    CKM_CAMELLIA_ECB                    16         32  ...
    CKM_CAMELLIA_KEY_GEN                16         32  ...
    ...
    CKM_ECDSA                          112        571  ...
    CKM_ECDSA_SHA1                     112        571  ...
    CKM_ECDH1_DERIVE                   112        571  ...

    たとえば、次のコマンドは、ユーザーランドの Camellia メカニズムを無効にします。

    # cryptoadm disable provider=/usr/lib/security/\$ISA/pkcs11_softtoken.so \
    >mechanism=CKM_CAMELLIA_CBC,CKM_CAMELLIA_CBC_PAD,CKM_CAMELLIA_CTR,CKM_CAMELLIA_ECB,CKM_CAMELLIA_KEY_GEN
    # cryptoadm list -p
    User-level providers:
    =====================
    /usr/lib/security/$ISA/pkcs11_kernel.so: all mechanisms are enabled.
    /usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled, 
    except CKM_CAMELLIA_KEY_GEN,CKM_CAMELLIA_ECB,CKM_CAMELLIA_CBC,CKM_CAMELLIA_CBC_PAD,CKM_CAMELLIA_CTR. random is enabled.

    Caution

    注意  -  厳格なポリシーのための BE は、本番環境で使用する前に徹底的にテストしてください。


  11. FIPS 140-2 モードの使用を停止するには、元の BE をアクティブ化してリブートします。

    # beadm activate original-BE
    # reboot