![]() |
![]() |
2004/12/12 工事中
Pegasus での https のサポートは Plan9 4ed. の TLS ライブラリを使用している。
暗号通信を行うためには公開鍵と秘密鍵のペアを作成すれば良いはずなのだが、web の世界ではよけいな付加「価値」を付け、それによってひどく面倒になっている。公開鍵に(意味の無い)証明書を添えなければ、ブラウザが「このサーバは危ないよ」と言わんばかりの警告を発するのである。かくして CA ビジネスなるものが発生する。
Web サーバを使用してビジネスを行おうとすれば証明書を買わざるを得ないであろう。セールスマンは身だしなみを整える必要があるからである。(身だしなみはセールスマンだけではなく、詐欺師の必需品でもある。) 真の信用とは何の関係もないと分かっていても。
Plan 9 環境では2つの方法がある。rsagen を使う方法と ssh_genkey を使う方法である。いずれも自己証明である。
マニュアル rsa(8) によると次のように作成する。(但しこれは Bell Labo の場合)
term% cd /sys/lib/tls term% auth/rsagen -t 'service=tls owner=*' >key term% auth/rsa2x509 'C=US CN=*.cs.bell-labs.com' key | auth/pemencode CERTIFICATE >cert
筆者の環境では例えば次のようになるであろう。(どっちみち正式の「証明書」ではないので、適当に書けばよい。)
term% auth/rsa2x509 'C=JP ST=Aichi L=Nagoya O=Aichi-University OU=ArLab CN=Arisawa' key | auth/pemencode CERTIFICATE >cert
これはもちろんブラウザからは警告が発せられる。ブラウザによっては内容を見る事ができる。

Mozilla 1.4 による内容確認
key を秘密にし、cert を公開する。auth/rsagen で生成された key は既に factotum 形式になっている。
term% chmod 400 key term% chmod 444 cert
Pegasus 2.1 の mon を使うには
term% b=/usr/local/bin/386 term% r=/sys/lib/tls/key term% c=/sys/lib/tls/cert term% $b/mon -du web -r $r $b/httpd -suM -p443 -c $c
とする。今回の mon ではユーザ web のパスワードは要らない。
httpd の -c オプションでは「証明書」のフルパスを与える。
「証明書」を作るには次の手順を踏む。(マニュアル X509(8))
/sys/lib/ssh に作成される。次のように作成する。(但しこれは Bell Labo の場合)
term% aux/ssh_genkey term% ls -l /sys/lib/ssh --rw-rw-r-- M 8 arisawa sys 318 Dec 13 22:57 /sys/lib/ssh/hostkey.public --rw------- M 8 arisawa sys 1167 Dec 13 22:57 /sys/lib/ssh/hostkey.secret --rw------- M 8 arisawa sys 1216 Dec 13 22:57 /sys/lib/ssh/hostkey.secret.factotum term% cd /sys/lib/ssh term% aux/X509gen -p hostkey.secret 'C=US ST=NJ L=07922 O=Lucent OU=''Bell Labs'' CN=G.R.Emlin' > cert.pem term% ls -l --rw-rw-r-- M 8 arisawa staff 822 Dec 13 23:12 cert.pem --rw-rw-r-- M 8 arisawa sys 318 Dec 13 22:57 hostkey.public --rw------- M 8 arisawa sys 1167 Dec 13 22:57 hostkey.secret --rw------- M 8 arisawa sys 1216 Dec 13 22:57 hostkey.secret.factotum
こうして作成された hostkey.secret.factotum は現在の factotum の仕様と合致していない。多分 X509gen が古いのであろう。つまり次のようなものが生成される。
/sys/lib/ssh/hostkey.secret.factotum
key proto=sshrsa size=1024 ek=29 !dk=16F3288A28B20C38809FEF03D68B8749...
マニュアル factotum(4) によれば proto=sshrsa はサポートされていない。
proto=sshrsa
を
proto=rsa service=tls role=client
に書き換えると Pegasus で使える。すなわち
key proto=rsa service=tls role=client size=1024 ek=29 !dk=16F3288A28B20C38809FEF03D68B8749...
以下では hostkey.secret.factotum は修正済みとする。
term% c=/sys/lib/ssh/cert.pem term% r=/sys/lib/ssh/hostkey.secret.factotum term% b=/usr/local/bin/386 term% $b/mon -du web -r $r $b/httpd -suM -p443 -c $c term% ps ... web 1068 0:00 0:00 1368K Open httpd web 1070 0:00 0:00 248K Pread factotum arisawa 1071 0:00 0:00 188K Pread ps term%
なお Pegasus 2.1 の mon ではユーザ web のパスワードが不要である。
ar% /usr/local/bin/386/mon: # setfactotum: write /mnt/factotum/ctl: unknown proto rsa
これは factotum のバージョンが古い。