このセクションの例では、Apache HTTP Server Version 2.4 を FIPS 140-2 モードで実行するように Oracle Solaris システムを構成します。システムは SPARC T5-2 サーバーであり、これにより SPARC5 プロセッサでの暗号化アクセラレーションが提供されます。
主な手順は次のとおりです。
FIPS 140-2 レベル 1 を構成する BE を作成し、そこにブートします。
新しい BE で、FIPS 140-2 プロバイダを有効にします。
FIPS 140-2 モードで 2 つのコンシューマ SunSSH と Apache HTTP Server Version 2.4 を有効にします。
policy.conf ファイルを変更して、FIPS 140-2 パスワードハッシュを使用しないシステムとの相互運用性を削除します。
FIPS 140-2 BE にブートします。
テストします。
次の例では、この構成を実現するために実行する詳細なアクションについて説明します。
現在の構成に基づいて BE を作成し、それをブートします。
# beadm create S11.3-FIPS-140 # beadm activate S11.3-FIPS-140 # reboot
新しい BE で、暗号化フレームワークでの FIPS 140-2 モードを有効にします。
# cryptoadm enable fips-140
fips-140 パッケージがまだロードされていない場合は、このコマンドでそのパッケージもロードされます。
OpenSSL の FIPS 140-2 モードバージョンを有効にします。
OpenSSL の FIPS 140-2 モードバージョンがシステム上に存在することを確認します。
# pkg mediator -a openssl MEDIATOR VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION openssl vendor vendor default openssl system system fips-140
注意 - OpenSSL モジュールに切り替えようとしたときに、そのモジュールがシステム上に存在しないと、システムを使用できなくなる可能性があります。 |
FIPS 140-2 OpenSSL プロバイダを有効にします。
# pkg set-mediator -I fips-140 openssl
SunSSH コンシューマを構成し、FIPS 140-2 モードで有効にします。
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
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 オプションを使用して、有効な鍵の長さを指定する必要があります。
FIPS 140-2 モードで Apache HTTP Server を構成します。
検証された鍵の長さで 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
ssl.conf 構成ファイルを作成します。
# cp /etc/apache2/2.4/samples-conf.d/ssl.conf /etc/apache2/2.4/conf.d/
わかりやすくするために、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
その他の鍵情報がサイトポリシーに対して正しく構成されていることを確認します。
# 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
Web サーバーのサイト構成を完了します。
たとえば、SSL プロトコルバージョンを指定します。
# grep ^SSLProtocol /etc/apache2/2.4/conf.d/ssl.conf SSLProtocol all -SSLv2 -SSLv3
許容可能なハッシュとして 2a を削除することにより、FIPS 140-2 以外のパスワードハッシュが使用されないようにします。
# pfedit /etc/security/policy.conf CRYPT_ALGORITHMS_ALLOW=5,6
(オプション) すべてのログインが正しいハッシュを使用することを確認します。
この 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 ...
各ユーザーにログイン時に新しいパスワードを強制的に作成させます。
# passwd -f [-r files | ldap ] username
コンシューマが構成されたら、BE をリブートします。
# reboot
構成をテストします。
プロバイダが 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 の暗号化の使用をトレースします。
端末ウィンドウで、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
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 はエラーを返します。
(オプション) FIPS 140-2 以外のアルゴリズムがすべての暗号化フレームワークコンシューマで使用されないようにするには、FIPS 140-2 以外のメカニズムを無効にします。
次の一連のコマンドにより、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.
注意 - 厳格なポリシーのための BE は、本番環境で使用する前に徹底的にテストしてください。 |
FIPS 140-2 モードの使用を停止するには、元の BE をアクティブ化してリブートします。
# beadm activate original-BE # reboot