S/MIMEでの署名

このQ&Aのポイント
  • S/MIMEでの署名方法とは?
  • S/MIMEでのメール署名について
  • S/MIMEとは何ですか?
回答を見る
  • ベストアンサー

S/MIMEでの署名

RFCのサンプルは次のようになっていました。 Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary=boundary42 --boundary42 Content-Type: text/plain This is a clear-signed message. --boundary42 Content-Type: application/pkcs7-signature; name=smime.p7s Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=smime.p7s ghyHhHUujhJhjH77n8HHGTrfvbnj756tbB9HG4VQpfyF467GhIGfHfYT6 4VQpfyF467GhIGfHfYT6jH77n8HHGghyHhHUujhJh756tbB9HGTrfvbnj n8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHhHUujpfyF4 7GhIGfHfYT64VQbnj756 --boundary42-- ここでは、 This is a clear-signed message. に対する署名が、 ghyHhHUujhJhjH77n8HHGTrfvbnj756tbB9HG4VQpfyF467GhIGfHfYT6 4VQpfyF467GhIGfHfYT6jH77n8HHGghyHhHUujhJh756tbB9HGTrfvbnj n8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHhHUujpfyF4 7GhIGfHfYT64VQbnj756 ということでしょうか? 日本語を扱う場合は、 エディターのデータではなくて、送信直前のバウンダリーで囲まれたデータに対して 署名がなされる。 と理解してよろしいでしょうか? さらに、添付ファイルがつく場合には、 Content-Type: multipart/mixed; boundary=bar --bar Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable =A1Hola Michael! How do you like the new S/MIME specification? It's generally a good idea to encode lines that begin with From=20because some mail transport agents will insert a greater- than (>) sign, thus invalidating the signature. Also, in some cases it might be desirable to encode any =20 trailing whitespace that occurs on lines in order to ensure =20 that the message signature is not invalidated when passing =20 a gateway that modifies such whitespace (like BITNET). =20 --bar Content-Type: image/jpeg Content-Transfer-Encoding: base64 iQCVAwUBMJrRF2N9oWBghPDJAQE9UQQAtl7LuRVndBjrk4EqYBIb3h5QXIX/LC// jJV5bNvkZIGPIcEmI5iFd9boEgvpirHtIREEqLQRkYNoBActFBZmh9GC3C041WGq uMbrbxc+nIs1TIKlA08rVi9ig/2Yh7LFrK5Ein57U/W72vgSxLhe/zhdfolT9Brn HOxEa44b+EI= --bar-- それぞれの部分に対して、署名をつくり、 結果として、 さらに2つの署名がくっついているメールを送信する と理解してよいのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • amyaad
  • ベストアンサー率100% (8/8)
回答No.1

1つ目の質問については、そのとおりです。バウンダリーで囲まれた範囲が署名の対象です。 2つ目の質問については、署名はあくまで1つのメールにつき1つです。添付ファイルがある場合は、メール本文と添付ファイルを合わせた全体に対して署名されます。

uyama33
質問者

お礼

ありがとうございます。 いまは、RFC5280を見ています。 とりあえず、証明書作りからやってみます。 RFC5751には添付ファイルがついている例が無かったので助かりました。 自分宛にメールを送信しながら調べてみます。 これからも、よろしくお願いいたします。

関連するQ&A

  • MIME emlの解析に関して

    Perlにて、 emlの本文(htmlとplain)の取得をしたいです。 ライブラリとして、 Email::MIME を使用しております、現在以下の様な感じです。 my $parsed = Email::MIME->new($text); for my $part ($parsed->parts) { if($part->{ct}{discrete} !~ /^text/){ }elsif($part->content_type =~ m|text/html|){ #html }else{ #plain } この状態で$part->body_strや$part->bodyで取得が可能かと考えておりましたが、 emlにて入れ子構造が上手く取得出来ず、困っております。 やり方等、如何様でも構いませんので、ご指摘頂ければ幸いで御座います。 sampleのEML※サンプルなのでhtmlはhtml形式になっておりません。 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Return-Path: <test@test.jp> X-Original-To: test@test.jp Delivered-To: test@test.jp X-Env-Sender: test@test.jp Date: Wed, 7 Dec 2011 02:48:11 -0600 (CST) From: <test@test.jp> To: test@test.jp Subject: =?UTF-8?B?dGVzdA==?= =?UTF-8?B?dGVzdA?= =?UTF-8?B?dGVzdA?= =?UTF-8?B?dGVzdA==?= Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_33646_1423332566.1323247678520" ------=_Part_33646_1423332566.1323247678520 Content-Type: multipart/alternative; boundary="----=_Part_33649_2021685376.1323247678532" ------=_Part_33649_2021685376.1323247678532 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 dGVzdA == ------=_Part_33649_2021685376.1323247678532 Content-Type: text/html;charset=UTF-8 Content-Transfer-Encoding: base64 dGVzdA== ------=_Part_33649_2021685376.1323247678532-- ------=_Part_33646_1423332566.1323247678520-- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    • ベストアンサー
    • Perl
  • サーバーでのデコード方法(例えばbase64)

    質問内容 サーバーでのPHPスクリプトではアップロードされたファイルのデコードを行うにはContent-Transfer-Encoding: base64をみて 適切にデコード処理をするのだと考えますがContent-Transfer-Encoding: base64を取得する方法はどのようにすればいいか わからなくて困っています。 $_FILES,getallheaders(),file_get_contents('php://input')等を試しましたが必要な情報は得られませんでした。 知りたい内容は 1.ポストされたアップロードファイルのデコードはどのような判定方法になるか。 2.私は先にも記述しましたがContent-Transfer-Encoding: base64行を判定の基準とするものとと考えています、でもその内容の取得方法がわかりません。 3.および、これらの関連として生のデータ取得についても教えていただければ幸いです。($_POSTや$_FILESに加工される前の情報) 環境: SERVER_SOFTWARE : Apache/2.2.11 (Win32) mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.8 下記はHTTPプロトコルでサーバーに送られたデータストリームです。 (info1とinfo2は質問内容には直接関係はありません) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ POST /test/xxxx.php HTTP/1.0 Host: 192.168.xxx.uuu User-Agent: wxWidgets 2.x Content-Length: nnn Content-type: multipart/form-data; boundary=_--Boundary_separator --_--Boundary_separator Content-Disposition: form-data; name="info1" AAAAAAAAAAAAAAA --_--Boundary_separator Content-Disposition: form-data; name="info2" BBBBBBBBBBBBBBB --_--Boundary_separator Content-Disposition: form-data; name="file"; filename="anyfile.jpg" Content-Type: multipart/form-data Content-Transfer-Encoding: base64 base64でencodeされたデータ内容の羅列 --_--Boundary_separator-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 以上 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 画像の添付ファイルをメールで送信する

    頑張って、作ったけど、うまくいかないよぉ・・・ だれか、たすけてくださぃにゃん。 //メールのヘッダ $header = "Cc:$cc\n"; $header .= "From:$from\n"; $header .= "X-Mailer: PHP/".phpversion()."\n"; $header .= "MIME-version: 1.0\n"; if(file_exists($upfile)){ //アップファイルがあれば $header .= "Content-Type: multipart/mixed;\n"; $header .= "\tboundary=\"$boundary\"\n"; $msg .= "This is a multi-part message in MIME format.\n\n"; $msg .= "--$boundary\n"; $msg .= "Content-Type: text/plain; charset=ISO-2022-JP\n"; $msg .= "Content-Transfer-Encoding: 7bit\n\n"; }else{ $header .= "Content-Type: text/plain; charset=ISO-2022-JP\n"; $header .= "Content-Transfer-Encoding: 7bit\n"; } $msg .= "本文だよ\n"; //ファイルの読み込み if(file_exists($photo1)){ $fp = fopen($photo1, "r") or die("error"); $contents = fread($fp, filesize($photo1)); fclose($fp); $f_encoded = chunk_split(base64_encode($contents)); //エンコードして分割 $msg .= "\n--$boundary\n"; $msg .= "Content-Type: " . $photo1_type . ";\n"; $msg .= "\tname=\"$photo1_name\"\n"; $msg .= "Content-Transfer-Encoding: base64\n"; $msg .= "Content-Disposition: attachment;\n"; $msg .= "\tfilename=\"$photo1_name\"\n\n"; $msg .= "$f_encoded\n"; } $msg .= "--$boundary--"; //メール送信を実行する mb_send_mail( $to, $subject, $msg, $header );

    • 締切済み
    • PHP
  • PC→携帯に送ると出るメッセージ(?)

    たとえば、PC→携帯に送るとき、本文に『あ』と書いて送るとします。 そうすると、 This is a multi-part message in MIME format. ------=_NextPart<___> Content-Type: text/plain Content-Transfer-Encoding: 7bit あ ------=_NextPart<___> Content-Type: text/html Content-Transfer-Encoding: quoted-printable ~~~ *省略 ~~~ *個人情報が書かれているかもしれないので、省略します、必要だったらいってください。 また、個人情報があるかもしれないので数字などは<>としました。 これは一体何なんでしょうか? また、でなくするにはどうすればいいのでしょうか? よろしくお願いします。

  • メールの文字化け

    こんにちわ。 友人からメールが送られてきたのですが、 「縺繝」のような中国文字?になっていて、読めません。 どうすれば読めますか。 私の環境はXP,メールソフトはHotMailです。 またそのメールの中に下記メッセージがありました。 This is a multi-part message in MIME format. --Boundary_(ID_lC5MDYXuWT2b2Ow6cpm90w) Content-type: text/plain; charset=utf-8 Content-transfer-encoding: 8BIT よろしくお願いします。

  • gmailからwillcomへのemailにおける文字列について

    gmailからwillcomへメールを送ると本文の前に文字列が出るのですがこれはどうすれば消すことができるのでしょうか? gmailからwillcom、willcomからgmailに送ったtestとのみ入力した文章をコピーします。 ------=_Part_18502_15771748.1167620538812 Content-Type: text/plain; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline test ------=_Part_18502_15771748.1167620538812 Content-Type: text/html Content-Transfer-Encoding: 7bit Content-Disposition: inline test ------=_Part_18502_15771748.1167620538812-- ここの ------=_Part_18502_15771748.1167620538812 Content-Type: text/plain; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline という部分です。 これを抜いてtestという文章だけをメール送信するにはどうすればよいのでしょうか?

  • Eudora-Jで着信してしまったメール

    Eudora-J で着信してしまったメールが HTMLコードを含むもので一部文字化けしていて読めません。 マシンは、OS9で動いているもの、OS 10.4で動いているものの 二台があります。どうやったら読めるようになるでしょうか? メールの先頭には以下のようにかかれています This is a multi-part message in MIME format. ------msg_border Date: Tue, 21 Feb 2006 04:10:33 -0800 Content-Type: multipart/alternative; boundary="----alt_border_1" ------alt_border_1 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: quoted-printable

    • ベストアンサー
    • Mac
  • MIMEヘッダ

    こんにちは。質問をさせてください。 今、PHPのsendmail関数を使用してHTMLメール・テキストメールを送信しようと考えています。 ------------------------------------------------ ### メールの送信 open MAIL, "|/usr/sbin/sendmail -f "****@aaa.co.jp" "****@bbb.co.jp""; ### 全体のヘッダ print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-Type: Multipart/Mixed; boundary=\"--=kuguri\"\n"; print MAIL "Content-Transfer-Encoding:Base64\n"; print MAIL "From: $from\n"; print MAIL "To: $to\n"; print MAIL "Subject: $subject\n"; ### テキストメール本文のパート print MAIL "--=kugiri\n"; print MAIL "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n"; print MAIL "\n"; print MAIL "HELLO\n"; ### HTMLメール本文のパート print MAIL "--=kugiri\n"; print MAIL "Content-Type: text/html;\n"; print MAIL "\n"; print MAIL "<html><body>\n"; print MAIL "<font color="red">HELLO</font>\n"; print MAIL "</body></html>\n"; ### マルチパートのおわり。 print MAIL "--"\kugiri"\" . "--\n"; close MAIL; 上記のような記述の場合、受信側のメーラが HTML設定の時は、"HELLO(赤色)" TEXT設定の時は、"HELLO(黒色)"で受信しますでしょうか? スクリプトの抜粋でわかりにくいと思いますが、宜しくお願い致します。

  • sendmail でのヘッダ部分Content-Transfer-Encodingについて

    あまりPerlに精通しておりませんが、よろしくお願いします。 Perl でフォームからメールを送信するページを作成しましたが、メールヘッダの部分に --------------- print OUT "Content-Type: text/plain; charset=iso-2022-jp\n"; print OUT "Content-Transfer-Encoding: 7bit\n"; print OUT "MIME-Version: 1.0\n"; --------------- という風に書いているのに、届くメールは Content-Type: text/plain; charset=iso-2022-jp MIME-Version: 1.0 になって、Content-Transfer-Encoding: 7bit が抜け落ちます。(場合によっては、Content-Transfer-Encoding: base64 になる) どういった原因が考えられるか、アドバイスいただければ幸いです。よろしくお願いします。

    • ベストアンサー
    • Perl
  • 正規表現を使ったファイルタイプの抜き出し

    お疲れ様です。 いつもお世話になっております。 携帯で画像を添付してメールを送る メールを受け取って添付ファイルを保存。 このスクリプトを組んでいるのですが、携帯のキャリアによって、 ファイルのヘッダーが違ってきます。 -------------------------------------------------ここからau -------=_NextPart_46596_11396_41732 Content-Type: text/plain; charset=&quot;iso-2022-jp&quot; Content-Transfer-Encoding: 7bit -------=_NextPart_46596_11396_41732 Content-Type: image/jpeg; name=&quot;************.jpg&quot; Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=&quot;*********.jpg&quot; --------------------------------------------------auここまで ------------------------------------------------ここからdocomo --mimemk00 Content-Type: image/jpeg; name=&quot;***********.jpg&quot; Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=&quot;***********.jpg&quot; ------------------------------------------------docomoここまで eregi("Content-type: *([^;\n]+)", $file_head, $filetype) それぞれのファイルタイプは array(2) { [0]=> string(24) "Content-Type: text/plain" [1]=> string(10) "text/plain" } array(2) { [0]=> string(24) "Content-Type: image/jpeg" [1]=> string(10) "image/jpeg" } と入ります。 auはeregiが最初に一致した時点で処理を抜け、本来とりたいimage/jpegが取れないでいます。 これをdocomoと同じ処理で取れるようにしたいのですが、どうしたらいいでしょうか? よろしくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう