RIGHT:[[Sun 関係覚え書き]]
Sun Fire T2000 など,CPU に Sun
[[UltraSPARC T1 プロセッサ:http://jp.sun.com/products/processors/UltraSPARC-T1/]]
をつんだマシンでは,
その CPU による SSL アクセラレータの機能を利用できる.
*Cryptgraphic Framework [#c6c5008c]
今インストールされているライブラリの確認
# 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)を参照.
//=====================================================
*アプリケーションからの利用 [#zef02618]
アプリケーションから利用するには,
/usr/sfw/lib/libcrypto.so や /usr/sfw/lib/libssl.so を
リンクに使う.
**Apache なら [#dc9d9ec6]
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 での通信がうまくいかない.
----
*SSLv3(TLSv1)で反応が遅い [#v322c53e]
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
**現象 [#s6ca822d]
一日に数回 HTTPS での反応が遅くなる.
Apache のログには,反応が遅い時間帯には
何の記録も出ておらず,
むしろ,パケットが届いていないのではないかと
思われるぐらい.
**パケットをダンプしてみる [#f83a0c51]
パケットをダンプしてみると
TLSv1 Alert (Level: Fatal, Description: Bad Record MAC)
というアラートが出たときにハンドシェイクがうまくいかずに
時間がかかっているのでないかと思われる.
**ベンチマークをしてみる [#e63262ae]
次のコマンドで試してみる.(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)
**ワークアラウンド [#i6de2870]
ワークアラウンドとしては,
RSA ベースの暗号のみ使えとか,
[[KSSL>Sun/Solaris10/KSSL]] を使えなど(これは効果があるのか分からないが...)
http://blogs.sun.com/enigma/entry/sun_fire_t2000_and_secure#comment-1144
Patch 137111-05 以降を適用すればで直るようなので
それを適用するのが一番確実.