Sun Fire T2000 など,CPU に Sun UltraSPARC T1 プロセッサ をつんだマシンでは, その CPU による SSL アクセラレータの機能を利用できる.
今インストールされているライブラリの確認
# cryptoadm list -p
ハードが対応していれば,
Kernel hardware providers: ncp/0: all mechanisms are enabled.
という行が出ている(とおもう)
1024bit 以上の暗号キーが必要な場合は, SUNWcry パッケージをインストールして, pkcs11_softtoken_extra.so を有効にする必要がある.(ここは必要ないかな)
# cryptoadm uninstall provider=/usr/lib/security/\$ISA/pkcs11_softtoken.so # cryptoadm install provider=/usr/lib/security/\$ISA/pkcs11_softtoken_extra.so # cryptoadm disable provider=/usr/lib/security/\$ISA/pkcs11_softtoken.so \ mechanism=CKM_SSL3_PRE_MASTER_KEY_GEN, \ CKM_SSL3_MASTER_KEY_DERIVE, \ CKM_SSL3_KEY_AND_MAC_DERIVE, \ CKM_SSL3_MASTER_KEY_DERIVE_DH, \ CKM_SSL3_MD5_MAC,CKM_SSL3_SHA1_MAC
確認
# kstat -n ncp0 -s rsaprivate
Cryptographic Framework については, Sun Bingadmin
http://www.sun.com/bigadmin/motd/042006.html
から crypto framework で検索して出てくる文書 「The Solaris Cryptographic Framework」(pdf)を参照.
アプリケーションから利用するには, /usr/sfw/lib/libcrypto.so や /usr/sfw/lib/libssl.so を リンクに使う.
Apache なら以下のようにコンパイルを行う.
# CFLAGS='-DSSL_EXPERIMENTAL -DSSL_ENGINE' \ ./configure -enable-ssl --enable-rule=SSL_EXPERIMENTAL \ --with-ssl=/usr/sfw
で, Apache のssl.conf 内で
SSLCryptoDevice pkcs11
という行を加えておく.
あと,SSLCipherSuite の設定を次のようにするべし.
SSLCipherSuite ALL:!ADH:!EXPORT56:-AES256-SHA:-DHE-RSA-AES256-SHA: -DHE-DSS-AES256-SHA:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL (実際は 1行)
さもないと, Netscape 系のブラウザから SSL 3.0 での通信がうまくいかない.
Sun Fire T2000 の SSL ハードウェアアクセラレーションを 使っていて,Diffie-Hellman 共有鍵を使った通信を行おうとすると まれにうまくハンドシェイクができないことがあるようだ.
http://bugs.opensolaris.org/view_bug.do?bug_id=6554248
http://bugs.opensolaris.org/view_bug.do?bug_id=6540060
一日に数回 HTTPS での反応が遅くなる.
Apache のログには,反応が遅い時間帯には 何の記録も出ておらず, むしろ,パケットが届いていないのではないかと 思われるぐらい.
パケットをダンプしてみると
TLSv1 Alert (Level: Fatal, Description: Bad Record MAC)
というアラートが出たときにハンドシェイクがうまくいかずに 時間がかかっているのでないかと思われる.
次のコマンドで試してみる.(From Debian)
$ /usr/sbin/ab -c 100 -t 5 https://www.example.jp/ This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright 2006 The Apache Software Foundation, http://www.apache.org/ Benchmarking www.example.jp (be patient) SSL handshake failed (1). 4037:error:140943FC:SSL routines:SSL3_READ_BYTES:sslv3 alert bad record mac:s3_pkt.c:1057:SSL alert number 20 SSL handshake failed (1). 4037:error:140943FC:SSL routines:SSL3_READ_BYTES:sslv3 alert bad record mac:s3_pkt.c:1057:SSL alert number 20 Finished 82 requests Server Software: Apache/2.0.59 Server Hostname: www.example.jp Server Port: 443 SSL/TLS Protocol: TLSv1/SSLv3,EDH-RSA-DES-CBC3-SHA,1024,168 Document Path: / Document Length: 1058 bytes Concurrency Level: 100 Time taken for tests: 5.273505 seconds Complete requests: 82 Failed requests: 2 (Connect: 0, Length: 2, Exceptions: 0) Write errors: 0 Total transferred: 109760 bytes equests per second: 15.55 [#/sec] (mean) Time per request: 6431.104 [ms] (mean) Time per request: 64.311 [ms] (mean, across all concurrent requests) Transfer rate: 20.29 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 2362 1174.0 2304 4099 Processing: 20 266 496.4 96 3674 Waiting: 0 141 145.7 90 568 Total: 770 2628 1189.0 2325 4127 Percentage of the requests served within a certain time (ms) 50% 2325 66% 3051 75% 4075 80% 4076 90% 4089 95% 4096 98% 4098 99% 4127 100% 4127 (longest request)
Cipher Suite を選択してやってみる.
$ openssl ciphers -tls1 -v 'RSA:!EXP:!NULL': AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1 AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1 DES-CBC3-SHA SSLv3 Kx=RSA Au=RSA Enc=3DES(168) Mac=SHA1 DES-CBC-SHA SSLv3 Kx=RSA Au=RSA Enc=DES(56) Mac=SHA1 RC4-SHA SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=SHA1 RC4-MD5 SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5 I suggest AES128-SHA.
$ /usr/sbin/ab -Z AES128-SHA -c 100 -t 5 https://www.example.jp/ This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright 2006 The Apache Software Foundation, http://www.apache.org/ Benchmarking www.example.jp (be patient) Finished 535 requests Server Software: Apache/2.0.59 Server Hostname: www.example.jp Server Port: 443 SSL/TLS Protocol: TLSv1/SSLv3,AES128-SHA,1024,128 Document Path: / Document Length: 1058 bytes Concurrency Level: 100 Time taken for tests: 5.137 seconds Complete requests: 535 Failed requests: 0 Write errors: 0 Total transferred: 734020 bytes HTML transferred: 566030 bytes Requests per second: 107.00 [#/sec] (mean) Time per request: 934.605 [ms] (mean) Time per request: 9.346 [ms] (mean, across all concurrent requests) Transfer rate: 143.20 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 353 828 167.1 817 1503 Processing: 17 27 21.2 22 171 Waiting: 16 25 20.9 20 170 Total: 374 855 168.2 840 1522 Percentage of the requests served within a certain time (ms) 50% 840 66% 863 75% 891 80% 902 90% 977 95% 1256 98% 1429 99% 1466 100% 1522 (longest request)
ワークアラウンドとしては, RSA ベースの暗号のみ使えとか, KSSL を使えなど(これは効果があるのか分からないが...)
http://blogs.sun.com/enigma/entry/sun_fire_t2000_and_secure#comment-1144
Patch 137111-05 以降を適用すればで直るようなので それを適用するのが一番確実.