So verschlüsseln Sie E-Mails mit S / MIME

975
user60589

Ich überlege, einige meiner Mails mit S / MIME v3.1 zu verschlüsseln, da meine Geräte dies unterstützen sollen.

Jetzt frage ich mich, ob es ein (Befehlszeilen-) Werkzeug gibt, das das für mich tun könnte? Ich habe versucht, es zu googeln, aber ich habe nichts Versprechendes gefunden.

1
Die meisten Benutzer verwenden einen E-Mail-Client mit einem Add-On, wenn sie verschlüsselte E-Mails senden und empfangen möchten. Dadurch können sie die verschlüsselten E-Mails innerhalb des Vorschaubereichs lesen, die sie möglicherweise erhalten. Ramhound vor 7 Jahren 0

2 Antworten auf die Frage

2
Law29

Ja, OpenSSL ( openssl smimeoder openssl cms) kann das:

man smime:

BESCHREIBUNG

Der Befehl smime verarbeitet S / MIME-Mail. Es kann S / MIME-Nachrichten verschlüsseln, entschlüsseln, signieren und überprüfen.

man cms:

BESCHREIBUNG

Der Befehl cms verarbeitet S / MIME v3.1-Mail. Es kann S / MIME-Nachrichten verschlüsseln, entschlüsseln, signieren und überprüfen, komprimieren und dekomprimieren.

Aber der Mann sagt, er verschluckt einige Nachrichten und mag V3 nicht. user60589 vor 7 Jahren 0
@ user60589 - Klingt, als hätten Sie ein anderes Problem. Sie haben gefragt, ob es möglich ist, dass es tatsächlich möglich ist. OpenSSL war nur ein Vorschlag von vielen (es würde nicht jeden möglichen Vorschlag auflisten). Ramhound vor 7 Jahren 0
@ user60589 Es scheint, dass GNUtls auch für S / MIME verwendet werden kann, aber ich glaube nicht, dass es sich um eine Befehlszeile handelt, sondern eher integriert: http://www.claws-mail.org/faq/index.php/S/ MIME_howto Law29 vor 7 Jahren 0
Vielleicht könnte man vielleicht 'mutt' im Kommandozeilenmodus verwenden, aber ich habe es noch nie versucht. Ich habe allerdings OpenSSL benutzt. Law29 vor 7 Jahren 0
v3 könnte `openssl cms` sein. grawity vor 7 Jahren 2
@grawity Nun, das zeigt, dass Sie alle Manpages nach und nach noch einmal lesen sollten! Schade, dass es viel zu lesen ist ... meine Antwort bearbeiten. Law29 vor 7 Jahren 0
0
TEV

Hier ist ein Skript zum Verschlüsseln bereits vorhandener E-Mails, Sie müssen jedoch als Dateien im MH-Format darauf zugreifen. Als Bonus wird GPG anstelle von S / MIME verwendet, wenn das zweite Argument eine GPG-Schlüssel-ID ist. Wenn das zweite Argument ein Pfad zu einer Datei ist, die auf .pem endet, nimmt das Skript an, dass das zweite Argument ein X509-Zertifikat im Pem-Format ist, für das der entsprechende private Schlüssel schließlich zum Entschlüsseln der E-Mail verwendet wird.

#!/usr/bin/awk -f  ## Encrypt emails in MH format.  ## 1st argument is email file to encrypt. ## 2nd argument is PGP key identifier, or for S/MIME, certificate file.  BEGIN { ## If second argument ends with .pem, assume that S/MIME output ## is required, otherwise assume PGP/MIME. if (ARGC == 3 && ARGV[2] ~ /\.pem$/) S = 1 ## S/MIME, not PGP  if (S == 1) { Encrypt = "openssl smime -encrypt -aes256 -outform pem " ARGV[2] Encrypt = Encrypt "|sed '/^-----BEGIN PKCS7-----/d;" Encrypt = Encrypt "/^-----END PKCS7-----/d'"} else { Encrypt = "gpg2 --armor --encrypt -r " ARGV[2] Random = "openssl rand -base64 30"}  for (i=2;i < ARGC;i++) delete ARGV[i] ## Just one input file. }  { sub(/\r$/,"",$0)}  ##==========================================================  BlankCount > 0 { ## Everything from the 1st blank line onwards: print $0 | Encrypt ## Pipe opened on 1st matching line; stays open. next}  ##----------------------------------------------------------  $0 ~ /^[^ \t]/ { ## Any line starting with a non-whitespace character. CurrentBlank = 0 if (Started == 0) Started = 1}  ##----------------------------------------------------------  $0 ~ /^[ \t]*$/ { ## Blank line NOT at the top of the file. if (CurrentBlank == 0 && Started == 1) BlankCount++ CurrentBlank = 1  ## New Content-Type and Content-Transfer-Encoding headers to go at the ## end of the header-block, i.e. before the first blank line: if (BlankCount == 1) { if (S == 1) { H = "Content-Type: application/pkcs7-mime;" H = H " name=\"smime.p7m\"; smime-type=enveloped-data\n" H = H "Content-Transfer-Encoding: base64\n" H = H "Content-Disposition: attachment;" H = H " filename=\"smime.p7m\"\n" H = H "Content-Description: S/MIME Encrypted Message"} else { Random | getline Boundary Boundary = "Encrypt_/" Boundary  H = "Content-Type: multipart/encrypted;" H = H "\n boundary=\"" Boundary "\";" H = H "\n protocol=\"application/pgp-encrypted\"\n\n"  H = H "--" Boundary "\n" H = H "Content-Type: application/pgp-encrypted\n\n"  H = H "Version: 1\n\n"  H = H "--" Boundary "\n" H = H "Content-Type: application/octet-stream\n"}  print H  printf("%s\n", ContentType) | Encrypt printf("%s\n\n", TransferEncoding) | Encrypt}}  ##----------------------------------------------------------  ## Save original Content-Type and Content-Transfer-Encoding to put in ## encrypted part:  tolower($0) ~ /^content-type[ \t]*:/ { ContentType = $0 sub(/[^:][^:]*: */,"",ContentType) ContentType = "Content-Type: " ContentType ContentTypeLineNumber = FNR next} tolower($0) ~ /^content-transfer-encoding[ \t]*:/ { TransferEncoding = $0 TransferEncoding = "Content-Transfer-Encoding: " TransferEncoding sub(/[^:][^:]*: */,"",TransferEncoding) TransferEncodingLineNumber = FNR next}  $0 ~ /^[ \t][ \t]*[^ \t]/ { ## Non-blank line starting with space or tab CurrentBlank = 0 if (BlankCount == 0 && FNR > 1) { ## This must be a continuation line in the header if (FNR - 1 == ContentTypeLineNumber) { ContentTypeLineNumber = FNR ContentType = ContentType "\n" $0 next} if (FNR - 1 == TransferEncodingLineNumber) { TransferEncodingLineNumber = FNR TransferEncoding = TransferEncoding "\n" $0 next}}}  ##----------------------------------------------------------  Started == 1 { ## All header lines other than Type and Encoding. print $0}  END { close(Encrypt) if (S == 1) print "" else printf("\n--%s--\n", Boundary)}  ##----------------------------------------------------------