Multipart/signed Part IIIch habe versucht, in Perl einen SMTP-Klienten zu schreiben, der Mails in meinem Namen sendet und signiert. Zu diesem Zweck habe ich schon RFC 1847 nachgeschlagen, aber da steht nur: "The second body part contains the control information necessary to verify the digital signature." Was genau muss aber in den zweiten Teil? Okay, wenn ich das Ding erst mal hab, ist's ja nicht mehr schwer: Einfach in MIME::Base64 kodieren und mit MIME::Lite einfügen. Aber wie muss ich mein Zertifikat exportieren?
Eigentlich wollte ich MIME::Lite und MIME::Base64 benutzen, aber das wäre mir zu viele möglichek Fehlerquellen gewesen. Deshalb hab ich eine signierte Nachricht mit Outlook erzeugt und lokal gespeichert. Über und unter dem RFC822-konformen Teil der Nachricht war weiterer Krimskrams (scheinbar binär). Den habe ich weggelassen. Ebenfalls einen Header, der angibt, dass die Nachricht von Oultook erzeugt worden sei. Den Rest hab ich dann in mein Perlskript eingefügt. Das Komischste ist aber, dass die Mails, die ich somit versende, nirgendwo ankommen. Ohne Zertifikat hat mein Skript aber funktioniert.
my ($mailhost, $absender, $empfaenger, $smtp);
$mailhost = 'smtp.web.de';
$absender = q<fokuhila@.de>;
$empfaenger = q/"Peter Mustermann" Muster@domain.net/;
$smtp = Net::SMTP->new($mailhost);
$smtp->mail($absender);
$smtp->to($empfaenger);
$smtp->data();
$smtp->datasend(<<'FERTIG');
MIME-Version: 1.0
Content-Type: multipart/signed;
protocol="application/x-pkcs7-signature";
micalg=SHA1;
boundary="----=_NextPart_000_000D_01C114FB.9BD41980"
------=_NextPart_000_000D_01C114FB.9BD41980
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Dieser Text ist _wirklich_ von mir.
------=_NextPart_000_000D_01C114FB.9BD41980
Content-Type: application/x-pkcs7-signature;
name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="smime.p7s"
[hier mein Zertifikat]
------=_NextPart_000_000D_01C114FB.9BD41980--
FERTIG
$smtp->dataend();
$smtp->quit();