Sun 関係覚え書き

Sun Fire T2000 など,CPU に Sun UltraSPARC T1 プロセッサ をつんだマシンでは, その CPU による SSL アクセラレータの機能を利用できる.

Cryptgraphic Framework

今インストールされているライブラリの確認

#  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 なら

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)で反応が遅い

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 以降を適用すればで直るようなので それを適用するのが一番確実.


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-11-01 (土) 12:24:56