E / M को S / MIME से कैसे एन्क्रिप्ट करें


1

मैं S / MIME v3.1 का उपयोग करके अपने कुछ मेल को एन्क्रिप्ट करने पर विचार कर रहा हूं, क्योंकि मेरे उपकरणों को इसका समर्थन करना चाहिए।

अब मुझे आश्चर्य है कि क्या कोई (कमांड लाइन) उपकरण है जो मेरे लिए ऐसा कर सकता है? मैंने इसे गूगल करने की कोशिश की, लेकिन मुझे कुछ वादा नहीं मिला।


ज्यादातर लोग ईमेल क्लाइंट का उपयोग ऐड-ऑन के साथ करते हैं यदि वे एन्क्रिप्टेड ईमेल भेजने और प्राप्त करने के लिए जा रहे हैं, तो यह उन्हें पूर्वावलोकन फलक के भीतर एन्क्रिप्टेड ईमेल पढ़ने की अनुमति देता है, जो उन्हें प्राप्त हो सकता है।
Ramhound

जवाबों:


2

हां, ओपनएसएसएल ( openssl smime या openssl cms ) वह कर सकता है:

man smime:

विवरण

स्माइली कमांड S / MIME मेल को हैंडल करता है। यह एन्क्रिप्ट, डिक्रिप्ट, साइन कर सकता है      और S / MIME संदेशों को सत्यापित करें।

man cms:

विवरण

सेमी कमांड S / MIME v3.1 मेल को हैंडल करता है। यह एन्क्रिप्ट, डिक्रिप्ट, साइन कर सकता है    और S / MIME संदेशों को सत्‍यापित, संपीड़ित और अनसेप करें।


लेकिन आदमी कहता है कि यह कुछ संदेशों पर चुटकी लेता है और v3 पसंद नहीं करता है।
user60589

@ user60589 - लगता है कि आपको एक अलग समस्या है। आपने पूछा कि क्या यह संभव है, यह वास्तव में संभव है, ओपनएसएसएल केवल कई में से एक सुझाव था (हर एक संभावित सुझाव को सूचीबद्ध करने से हमें नहीं होगा)।
Ramhound

@ user60589 ऐसा प्रतीत होता है कि GNUtls का उपयोग S / MIME के ​​लिए भी किया जा सकता है, लेकिन मुझे नहीं लगता कि यह कमांड-लाइन है, बल्कि यह एकीकृत है: claws-mail.org/faq/index.php/S/MIME_howto
Law29

शायद सिर्फ एक का उपयोग कर सकता है mutt कमांड लाइन मोड में, लेकिन मैंने कभी कोशिश नहीं की। मैं है हालांकि ओपनएसएसएल का इस्तेमाल किया गया।
Law29

2
v3 हो सकता है openssl cms
grawity

0

यहां पहले से मौजूद ईमेल को एन्क्रिप्ट करने के लिए एक स्क्रिप्ट है, लेकिन आपको MH प्रारूप में फ़ाइलों के रूप में उन तक पहुंच की आवश्यकता है। बोनस के रूप में, यह S / MIME के ​​बजाय GPG का उपयोग करता है यदि दूसरा तर्क GPG कुंजी ID है। यदि दूसरा तर्क .pem में समाप्त होने वाली फ़ाइल का एक मार्ग है, तो स्क्रिप्ट मानती है कि दूसरा तर्क एक पेम-प्रारूप X509 प्रमाणपत्र है, जिसके लिए संबंधित निजी कुंजी को अंततः ईमेल को डिक्रिप्ट करने के लिए उपयोग किया जाएगा।

#!/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)}

##----------------------------------------------------------
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.