【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?

お世話になります。

perlをつかってメールフォームを作っています。
メールフォームから受け取った情報を(受け取るまでは暗号化してます。)
S/MIMEで暗号化しメール送信したいと考えております。(linux sendmeil)
調べてみたところopensslを使いあらかじめ用意したテキストファイルを
S/MIMEで送る事ができました。

↓こんな感じです。---------------------------------------------------------------

$SMIME = 'openssl smime -sign -signer my-cesr.pem -inkey key.pem -in mail.txt -text |
openssl smime -encrypt -from masa@****.co.jp -to yosi@****.co.jp -subject "signtest"
-des3 my-cesr.pem | /usr/sbin/sendmail masa@****.co.jp';

open (MAIL, "| $SMIME");
close(MAIL);
--------------------------------------------------------------------------------

↑この方法ですとメールフォームから受け取った情報を一度ファイルに
保存(mail.txt)しなければならないので、実用的ではありません。
何とかファイルからではなく変数で送信したいのですがうまく行きません。
っというか方法がさっぱり分かりません。

どうぞ宜しくお願いします。m(__)m

A 回答 (4件)

再々度。


悔しい(笑)ので自分のところで試してみたところ,私の環境(openssl 0.9.6c, Solaris 2.6, Perl 5)では,以下のようなPerlスクリプトが正常に動作しましたが...。

- Linux と Solaris (あまり重要な差ではない)
- CGIとシェルからの実行 (実行権に気を付けるくらい)
- メイルの送信にsendmailではなくmailx (Solaris についてくる sendmail の CUI のようなものなので本質は同じ)

くらいしか違いがないと思うのですが…。sonarさんのところのopensslのバージョンはどうなっているでしょうか?


#!/bin/somewhere/perl

$msg = 'This is my happiness.';
$openssl = 'openssl smime -sign -signer senderCert.pem -inkey senderPrivKey.pem -text | openssl smime -encrypt -des3 senderCert.pem | mailx -s "openssl test" ***@***.***';

system ("echo '$msg' | $openssl");

1;

この回答への補足

じっさいに試していただいたのですね。。。(^^;
ほんとにありがとうざいます。
動作したということなので自分も何とか頑張ります。

自分の環境は[openssl0.9.6b,redhat7.2,perl5]です。
なぜ駄目なのかちょっと調べてたのですが、どこかのメーリングで
「リダイレクトはOKだがパイプ渡しでは駄目。これはバグです。」のような事が書いてありました。
ちょっと面倒ですが今度はバージョンを上げて試してみます。

補足日時:2002/07/31 17:21
    • good
    • 0

殆どダイアログ状態ですね。



> どこかのメーリングで
> 「リダイレクトはOKだがパイプ渡しでは駄目。これはバグです。」のような事が書いてありました

そのMLは私も見た気がします。また別MLではそれに対するパッチ(ソース)を投稿していた人もいたような。
自分の状況と矛盾するので,ちょっと気になってはいるんですが。

さらにトライしてみられるのであれば,

- まず Perl からではなくシェルから,
- サインだけとか,暗号だけとかにわけて,echo 'abc' | openssl smime ... を実行し,

問題がどこにあるのかを正確に切り分けられることをお勧めします。
    • good
    • 0
この回答へのお礼

いまだ上手くいきませんが、よくよく考えたら
セキュリティー的にはファイルからのほうが無難かなと
思い直しました。。。(^^;
ただ、パイプでできないのは悔しいので 今後もトライしてみます。
それでは、いろいろとありがとうございました。m(__)m
失礼します。。。

お礼日時:2002/08/02 18:47

再びatonです。


すごい恥ずかしい間違いをしていました。

誤:open (MAIL, "cat $mail | $SMIME");

正:open (MAIL, "echo $mail | $SMIME");
  open (MAIL, "echo '$mail' | $SMIME");
  system ("echo $mail | $SMIME");
  system ("echo '$mail' | $SMIME");
の4つのうちのどれか(systemを使う場合 close (MAIL); は不要です)。

これでもうまくいかなそうな気もしますが,とりあえず試すだけ試してみてください。

この回答への補足

echo については cat のアイデアをいただいた時に
試してみましたが駄目でした。。。 (systemでも)

ありがとうございます。

補足日時:2002/07/30 15:39
    • good
    • 0

なぜ,「実用的ではない」のかが今一つ分からないのですが…。



$SMIME = 'openssl smime -sign -signer my-cesr.pem -inkey key.pem -text |
openssl smime -encrypt -from masa@****.co.jp -to yosi@****.co.jp -subject "signtest"
-des3 my-cesr.pem | /usr/sbin/sendmail masa@****.co.jp';

open (MAIL, "cat $mail | $SMIME");
close(MAIL);

註:$mail はメイル本文が入っている変数

とかじゃだめでしょうか?
(試してないので自信はありません)

この回答への補足

ご返答ありがとうございます。
試してみましたがうまくいきませんでした。。。

>なぜ,「実用的ではない」のかが今一つ分からないのですが…。

実用的ではない。。っというよりは単なるこだわりに近いかもです。。(^^;
なんというかスマートでない気がするんで。。。
もうひとふんばりして駄目だったら一度ファイルに落としてから
やる方法にいたします。

ありがとうございました。

補足日時:2002/07/30 09:33
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!