2009年10月20日更新
メール環境の暗号化
サーバ証明書の作成
秘密鍵をsecstoreに、証明書を/sys/lib/tls/cert.pemに作成します。 中間証明書があるなら/sys/lib/tls/chain.pemに置きましょう。 auth/rsa2x509の引数は自分の環境にあわせて書き換えます。
# ramfs
# cd /tmp
# auth/rsagen -t 'service=tls owner=*' >key
# auth/rsa2x509 'C=JP ST=Kanagawa L=Sagamihara O=lufia.org OU=9 CN=lufia' key | auth/pemencode CERTIFICATE >cert
証明書を自動的にfactotumへ取り込めるように、bootesのsecstoreを作成。 secstoreへの登録方法はsecstoreの使い方を。 bootesのsecstoreへ1つ以上キーが登録されているなら、 それと今回作成したキーを結合しないといけませんが、省略しています。
# auth/secuser -v bootes
(password)
(confirm)
# cat key >>factotum
# auth/secstore -p factotum
# rm key factotum
bootesは自分でロードしない限りsecstoreを読みにいかないので、 明示的にsecstoreを読み込むようcpurcを編集。 具体的には、auth/secstoredの下にauth/secstoreを追加。
# cat /cfg/$sysname/cpurc
...
auth/secstored
auth/secstore -n -G factotum | read -m >/mnt/factotum/ctl
...
また、初回起動時にsecstoreのパスワードを 設定していない場合は、auth/wrkeyを使って再設定してください。
証明書の配置
IMAP4, SMTPで使うため、適当な場所に証明書を移動します。 cert.pemの権限は444のほうが安全ですが、管理的にめんどくさいので664。
ユーザ、グループをsysにするために、 あらかじめファイルサーバからcert.pemを作っておきます。
fs: create /sys/lib/tls/cert.pem sys sys 664
fs: newuser sys +bootes
# cat cert >/sys/lib/tls/cert.pem
# rm cert
# unmount /tmp
fs: newuser sys -bootes
IMAP4 over SSL/TLS
上記で作成した証明書を使って、IMAP4の通信を暗号化します。 IMAPSのポートはtcpの993です。 以下ではserviceを/cfgへ移行した状態で書いています。 詳細は認証サーバの構築のサービスの隔離を参照。
fs: create /cfg/$sysname/service/tcp993 sys sys 775
fs: newuser sys +bootes
fsカーネルでは$sysnameをそのまま使うことはできないので、 実際のホスト名に置き換えてください。
# cd /cfg/$sysname/service
# cat >>tcp993
#!/bin/rc
exec tlssrv -c/sys/lib/tls/cert.pem -limap4d -r`{cat $3/remote} /bin/ip/imap4d -r`{cat $3/remote}>[2]/sys/log/imap4d
^D
それから、無くても動いてるようにみえるけど、これも。 なんだろうこれ。ルータが動いているなら、ポートの開放も忘れずに。 プロンプトが%の行は、一般ユーザで実行しても問題ありません。
% upas/fs -f /imaps/wisp # imapsを設定するサーバへ接続
upas/fs: opening /imaps/wisp: wisp/imaps:server certificate xxxxxxxxxxxxxxxxxxxxxxxxxxxxx not
xxxxxxxxxが取得できたら、それをそのまま次に使います。
# echo 'x509 sha1=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx' >/sys/lib/tls/mail
fs: newuser sys -bootes
動作確認が終われば、いらなくなったIMAP4サービスを削除します。 そのまま残していても困らないだろうとは思いますが、 有名なメールクライアントはIMAP4Sに対応しているので、 わざわざ残しておくことはないだろうという気がします。
fs: remove /cfg/wisp/service/tcp143
SMTP over SSL/TLS
SMTPの場合、暗号化の方法は2種類あります。
- ssmtp
- TCPポート465
- 通信開始から暗号化されている
- smtp+STARTTLS
- TCPポート25
- STARTTLSコマンドによって暗号通信が開始される
設定は、ssmtpはtlssrvによりupas/smtpdプロセスを開始します。 STARTTLS版は、upas/smtpdコマンドに-cオプションを使って証明書を与えます。 後者は暗号化通信が可能というだけで、 クライアントからSTARTTLSコマンドが発行されない限り暗号化されません。
今回はtcp587に-cオプションから証明書を与えました。
# cat /cfg/wisp/service/tcp587
#!/bin/rc
#smtp serv net incalldir user
user=`{cat /dev/user}
exec upas/smtpd -ac/sys/lib/tls/cert.pem -g -n $3
これにより、暗号化通信が開始されると /sys/log/smtpdにログが記録されるようになります。
started TLS with [...]
ついでなので、tcp25にも-c certを追加して終了。 あまり意味は無いかもしれません。
トラブルシューティング
tls reports failed
bootesの鍵が読み込めていない場合、/sys/log/imap4dに ログが記録されます。
tls reports failed: tls: local factotum_rsa_open: no key matches proto=rsa service=tls role=client
この場合は、以下の行をcpurcに加えてください。
auth/secstore -G factotum