[mew-dist 21554] openssl smime
Kazu Yamamoto ( 山本和彦 )
kazu at example.com
2002年 8月 28日 (水) 08:51:23 JST
[mew-dist 21506] の問題に関連して、mew-smime.el を調べているのですが、
疑問があるので知っている方がいたら教えて下さい。
openssl で S/MIME の署名を施すには、以下のようにします。
% openssl smime -in 署名するファイル -out 署名された結果のファイル \
-signer 署名者の証明書 -inkey 署名者の秘密鍵
ここで証明書とは、公開鍵に何らかの署名を施したものだと考えて下さい。
mew-smime.el では以下のように openssl を起動します
% openssl smime -in 署名するファイル -out 署名された結果のファイル \
-signer 署名者の証明書 -certfile 中間CAの証明書
という訳で、署名に必要な「署名者の秘密鍵」が、どこにも指定されていませ
ん。
openssl の smime のマニュアルには、
-inkey file
the private key to use when signing or decrypting.
This must match the corresponding certificate. If this
option is not specified then the private key must be
included in the certificate file specified with the
-recip or -signer file.
と書いてあります。
つまり、-inkey を指定せずに署名できているのなら、「署名者の証明書」に
秘密鍵が含まれていることになります。
通常、秘密鍵はパスワードで暗号化して保存します。この辺から想像になりま
すが、証明書に入っている秘密鍵も暗号化されてはいるのでしょう。(ユーザ
の運用にもよりますが。)
証明書は、公開するものです。ですから、暗号化された秘密鍵も公開されるこ
とになります。しかしながら、たとえ暗号化されていても秘密鍵は公開すべき
ではありません。
もし、上記の推測が正しいのなら、mew-smime.el を使っているユーザは、
S/MIME を危険な方法で運用していることになります。もっと言えば、世の中
で署名書を発行してくれる CA の発行方法自体が危険なのかもしれません。
P.S.
[おまけ]
坂根さんに教わった自己署名した証明書の作り方:
(1) 秘密鍵を作る。(この秘密鍵には、公開鍵も含まれる)
openssl genrsa -out privkey.pem 1024
(2) 証明書を作ってもらうための要求を作る。
openssl req -new -nodes -sha1 -keyform PEM -key privkey.pem -outform PEM -out request.pem -config /usr/share/examples/openssl/openssl.cnf
(3) その要求に応じて署名し、証明書を作る。
openssl x509 -req -in request.pem -signkey privkey.pem -out cert.pem
(4) S/MIME で署名してみる
% openssl smime -in 署名するファイル -out 署名された結果のファイル \
-signer cert.pem -inkey privkey.pem
# cert.pem には秘密鍵は含まれていないので、-inkey privkey.pem を指定
# しないと、署名できない。
--かず
Mew-dist メーリングリストの案内