1. 程式人生 > >OpenSSL命令---CMS

OpenSSL命令---CMS

用途:

該命令處理S/MIME v3.1郵件。可以用它對S/MIME訊息進行加密、解密、簽名、驗證簽名、壓縮以及解壓縮等操作。

用法:

openssl cms [-encrypt] [-decrypt] [-sign] [-verify] [-cmsout] [-resign] [-data_create] [-data_out ] [-digest_create ] [-digest_verify ] [-compress] [-uncompress] [-EncryptedData_encrypt] [-sign_receipt][-verify_receipt receipt] [-in filename ] [-inform SMIME|PEM|DER ] [-rctform SMIME|PEM|DER ] [-out filename] [-outform SMIME|PEM|DER] [-stream -indef -noindef] [-content filename] [-text] [-noout][-print] [-CAfile file] [-CApath dir] [-md digest] [-cipher] [-nointern] [-no_signer_cert_verify] [-nocerts][-noattr] [-nosmimecap] [-binary] [-nodetach] [-certfile file] [-certsout file] [-signer file] [-recip file] [-keyid][-receipt_request_all -receipt_request_first] [-receipt_request_from emailaddress] [-receipt_request_to emailaddress] [-receipt_request_print] [-secretkey key] [-secretkeyid id][-econtent_type type] [-inkey file] [-passin arg] [-rand file(s)] [cert.pem...] [-to addr] [-from addr][-subject subj] [-purpose, -ignore_critical, -issuer_checks, -crl_check, -crl_check_all, -policy_check, 
-extended_crl, -x509_strict, -policy -check_ss_sig]


選項說明:

-encrypt:用接收者的證書對郵件進行加密。輸入檔案是需要加密的資訊資料。輸出檔案是MIME格式的已經加密了的郵件資訊值。

-decrypt:用提供者的證書和私鑰檔案對郵件進行解密。輸入檔案是MIME格式的已經加密了的郵件資訊值。解密的郵件資訊將會寫入到輸出檔案中。

 -sign:用提供者的證書和私鑰檔案對郵件進行簽名。輸入檔案是需要簽名的資訊資料。輸出檔案是MIME格式的已經簽名了的郵件資訊值。

-verify:驗證已經簽名了的郵件。輸入和輸出都是已經簽名了的資料。如果支援的話清除文字和不透明的簽名信息值。

-cmsout:獲取一個輸入訊息,輸出一個PEM編碼格式的CMS結構。

-resign:重新簽名一個訊息:即獲取目前有可能已經被多個簽名者簽名的現存資料。

-data_create:建立一個CMS B<Data>型別的資料。

-data_out:輸出CMS B<Data>型別的上下文。

 -digest_create建立一個CMS B< DigestedData>型別資料。

-digest_verify:驗證一個CMS B< DigestedData>型別資料並輸出上下文。

-compress:建立一個CMS B< CompressedData>型別資料。OpenSSL在編譯時必須要包含“zlib”選項值。

-uncompress:解壓縮一個CMSB< CompressedData>型別資料並輸出上下文。OpenSSL在編譯時必須要包含“zlib”選項值。

 -EncryptedData_encrypt:用CMS B< EncrytedData >型別資料並輸出上下文。用提供的對稱金鑰和加密演算法對加密靈活的上下文進行加密。

-sign_receipt:對提供的訊息產生並輸出一個簽名的收據。輸入的訊息中必須包含一個簽名的收據請求資訊。功能根-sign命令相似。

-verify_receipt receipt:驗證從B<receipt>檔案中讀取的簽名的收據。輸入的訊息必須包含一個簽名的收據請求資訊。功能根-verify命令相似。

-in filename:用於加密或簽名的訊息值。

-inform SMIME|PEM|DER:指定了CMS結構的輸入格式。預設的是SMIME格式(讀取一個S/MIME格式訊息)。B<PEM> B<DER>格式改變CMS結構的輸入格式為PEMDER。目前僅僅影響了CMS結構的輸入格式,如果沒有CMS結構則輸入不會造成任何影響。

-rctform SMIME|PEM|DER:指定一個已經簽名了的收據格式,以用於B<-receipt_verify>操作。

-out filename:已經被解密或驗證了的MIME格式的訊息。

-outform SMIME|PEM|DER:指定了CMS結構的輸出格式。預設的是SMIME格式(寫出一個S/MIME格式訊息)。B<PEM> B<DER>格式改變CMS結構的輸出格式為PEMDER。目前僅僅影響了CMS結構的輸入格式,如果沒有CMS結構則輸入不會造成任何影響。

-stream -indefB<-stream> B<-indef>兩個選項等價於流I/O的編碼操作。

-content filename:指定了一個檔案包含的分離的目錄。它僅僅在B<-verify>中使用。如果CMS結構被用於分離簽名值,將會有用。如果輸入的格式是S/MIME則不會有效。

-text:如果加密或簽名資料時,這個選項新增無格式的MIME頭部的文字資訊到提供的訊息中。如果解密或驗證則分離出頭部資訊:如果解密或驗證簽名不是一個MIMI格式的資料,則會發生錯誤。

-noout:對B<-cmsout>操作來說,不輸出解析了的CMS結構。當和B<-print>選項合併使用的時候非常有用,因為CMS的語法將會被檢查。

-print:對B<-cmsout>操作來說,列印CMS結構中的所有的域。對測試用途時這個選項非常有用。

 -CAfile file:一個檔案包含可信任的CA證書。僅僅用於B<-verify>命令。

-CApath dir:包含可信任CA證書的目錄。僅僅用於B<-verify>命令。這個目錄必須是一個標準的目錄:每個CA檔案的檔名為XXXX.0XXXX為其持有者摘要值。

-md digest:當簽名或放棄簽名的摘要演算法。如果不存在,則預設的摘要演算法為SHA1

-cipher:使用的加解密演算法。例如triple DES (168位元組) - B<-des3>256位元組 AES - B<-aes256>。任何標準的演算法名字(用與EVP_get_cipherbyname()函式)優於一個破折號,例如B<-aes_128_cbc>

 -nointern:當驗證一個訊息時,證書通常包含在簽名訊息中。這個選項僅僅與B<-certfile>中指定的證書一起使用。無論怎樣,提供的證書可以作為一個可信任的CA來使用。

-no_signer_cert_verify:不去驗證簽名訊息中的簽名證書。

-nocerts:當用簽名者的證書籤名的時候,一般簽名者的證書將附加到簽名信息後。設定此選項後,將不附加簽名者的證書。這樣會減少簽名值的大小,但是驗證簽名值的時候必須從本地區複製一份簽名者的證書。

-noattr:當一個訊息被簽名後,一系列屬性將包含進去,屬性包括簽名時間以及支援的對稱演算法。設定了此選項後將不再新增屬性資訊。

 -nosmimecap:排除簽名信息中的對稱演算法列表,其它選項例如簽名時間和目錄型別始終被包含。

 -binary:預設的是:輸入訊息是被轉換了的,它的格式是"canonical",即結尾一般是CR LF格式。當這個選項被設定後,資料沒有轉換操作。當處理二進位制資料的時候這個選項非常有用。

 -nodetach:當簽名一個訊息時用不透明的簽名:如果郵件代理商不支援S/MIME格式,則這個表單將抵抗郵件轉換。沒有這個選項,清除文字的簽名將會被使用。

-certfile file:允許指定附加的證書。當簽名的時候將會包含這些證書。當驗證的時候需要搜尋簽名者的證書。證書必須是PEM格式的。

 -certsout file:包含到訊息中的證書資訊將會寫到file中。

-signer file:一個簽名證書,可以用於簽名或取消簽名。當多個簽名者被請求時,這個選項可以被用於多次。如果一個訊息將被驗證並驗證成功,則簽名者的證書將會寫入到file中。

-recip file:當解密訊息的時候所使用的接受者的證書。這個證書必須要匹配接受者的訊息值,如果不匹配,則會出現錯誤。

-keyid:用頒發者的金鑰標識來標識證書,代替頒發者名字和序列號。提供者的證書必須包含金鑰標識的額外資訊。B<-sign> B<-encrypt>選項使用。

-receipt_request_all -receipt_request_firstB<-sign>選項來說,包含一個簽名的收據請求。表明請求必須被所有的請求者或者請求者的第一個所提供(它們是郵件目錄而不是郵件列表)。不管B<-receipt_request_from>是否被包含。

-receipt_request_from emailaddress:對B<-sign>選項來說,包含一個簽名的收據請求。新增一個接受者提供的明確的地址。

-receipt_request_to emailaddress:新增一個明確的地址,該地址是已經簽名了的請求傳送的地址。當請求已經被簽名後這個選項必須設定。

-receipt_request_print:對B<-verify>來說,列印已經簽名了的收據請求的內容。

-secretkey key:指定使用的對稱金鑰。該金鑰必須被提供並且是16進位制的,它和對稱加密演算法一起使用。B<-EncryptedData_encrypt>B<-EncrryptedData_decrypt>, B<-encrypt> B<-decrypt> 選項將會使用它。當被B<-encrypt>B<-decrypt>時,提供的金鑰將會用於封裝或解封裝內容。

-secretkeyid id:對稱金鑰的金鑰識別符號或者是B<KEKRecipientInfo>的型別值。如果B<-secretkey>被用於B<-encrypt>選項時,它必須設定。包含B<-decrypt>選項時,當試圖解密B<KEKRecipientInfo>資訊時,如果金鑰值沒有被提供,則id值將會被用於查詢金鑰值。

-econtent_type type:如果沒有提供B<Data>型別,則設定壓縮內容的型別值為typeType元素可以是任何有效的OID,該OID可以是文字格式也可以是數字形式。

-inkey file:簽名或驗證簽名時所使用的私鑰。它必須匹配相應的證書。如果這個選項沒有被指定,私鑰必須包含在B<-recip> B<-signer>指定的證書檔案中。當簽名時,這個選項可以使用多次來指定連續的金鑰值。

-passin arg:私鑰密碼保護口令。

-rand file(s):隨機種子產生檔案。

cert.pem...:一個或多個訊息收件人的證書,當簽名一個訊息時使用。

-to, -from, -subject:相關的郵件頭部資訊值。它們將包含在簽名值之外並手動新增它們。簽名時很多S/MIME郵件客戶端可以根據表單中的地址資訊來檢查簽名者的證書郵件地址。

-purpose, -ignore_critical, -issuer_checks, -crl_check, -crl_check_all, -policy_check, -extended_crl, -x509_strict, -policy -check_ss_sig:設定證書鏈的驗證選項值。

注意:

MIME格式的訊息必須在頭部和輸出中沒有任何空白行的時候傳送。一些郵件程式會自動的新增一行空白行。能夠改變格式的一種方法是立即對傳送郵件進行管道處理。

提供的訊息必須是簽名了的或是加密了的。它們必須包含MIME頭部資訊或S/MIME客戶端希望顯示的屬性值。你可以使用B<-text>選項來自動地新增清楚地文字頭部資訊值。

一個"signed and encrypted"訊息是其中一種,簽名訊息既是加密訊息。這個就可以產生加密訊息。

程式的版本僅僅允許一個簽名者對應一個訊息,但是接收到的訊息可以用多個簽名者來驗證。如果一個訊息包含多個簽名者,則一些S/MIME客戶端將會阻塞。有可能的是簽名一個已經簽名的訊息時,去進行“平行的”簽名。

S/MIME客戶端中,B<-encrypt> B<-decrypt>選項反射處理普通的使用方式。嚴格的來說,CMS處理資料:CMS加密的資料將會用於其它用途。

當新增一個新的簽名者時,B<-resign>選項用一個現存的訊息進行摘要。這就意味著對現存的簽名者來說,屬性有可能被提出多次。

B<-stream> B<-indef>選項使實驗的流I/O稱為可能。對一個DER編碼的結果來說,它用不定長的長度結構來編碼則不管DER。如果內容沒有被分離,流處理被B<-encrypt>操作和B<-sign>操作所支援。

流一般是用於B<-sign> 操作,用來分離資料。

退出程式的返回值:

0:操作成功。

1:當解析命令選項時出現一個錯誤。

2:輸入檔案中的一個檔案不能夠被讀取。

3:當建立一個CMS檔案或讀取一個MIME訊息時發生一個錯誤。

4:解密或驗證簽名時發生錯誤。

5:訊息已經驗證通過,但寫出簽名者的證書時出錯。

下面的選項相容PKCS#7格式:

B<smime>命令僅僅處理老的PKCS#7格式的內容。CMS命令支援用密碼寫的訊息語法格式。訊息中一些有用的特性不能夠被應用程式(僅僅支援老的格式)所處理。它們的詳細說明如下:

B<-keyid>用於B<-sign> B<-encrypt>選項。

B<-outform PEM>用不同的頭部。

當用B<-encrypt>選項時使用B<-secretkey>選項。

例項:

建立一個清除文字的簽名訊息值:

openssl cms -sign -in message.txt -text -out mail.msg -signer mycert.pem

建立一個不透明的簽名訊息值:

openssl cms -sign -in message.txt -text -out mail.msg -nodetach -signer mycert.pem

建立一個簽名值,包含很多附加的證書和從其它檔案讀取私鑰值:

openssl cms -sign -in in.txt -text -out mail.msg -signer mycert.pem -inkey mykey.pem -certfile mycerts.pem

用兩個簽名者、用金鑰識別符號簽名一個訊息:

openssl cms -sign -in message.txt -text -out mail.msg \
-signer mycert.pem -signer othercert.pem -keyid

Unix環境下發生一個簽名了的訊息,包含頭部:

openssl cms -sign -in in.txt -text -signer mycert.pem \
-from [email protected] -to [email protected] \
-subject "Signed message" | sendmail [email protected]

驗證一個訊息,如果驗證成功,則提取出簽名者的證書:

openssl cms -verify -in mail.msg -signer user.pem -out signedtext.txt

傳送用3DES加密了的郵件:

openssl cms -encrypt -in in.txt -from [email protected] \
-to [email protected] -subject "Encrypted message" \
-des3 user.pem -out mail.msg

簽名並加密郵件(注意的是加密的命令不會包含B<-text>選項,因為已經加密了的資訊已經包含MIME頭部資訊值):

openssl cms -sign -in ml.txt -signer my.pem -text \
| openssl cms -encrypt -out mail.msg \
-from [email protected] -to [email protected] \
-subject "Signed and Encrypted message" -des3 user.pem


解密一個郵件:

openssl cms -decrypt -in mail.msg -recip mycert.pem -inkey key.pem

64編碼簽名資料:

openssl cms -verify -inform DER -in signature.der -content content.txt

128位元組的Camellia演算法加密資訊:

openssl cms -encrypt -in plain.txt -camellia128 -out mail.msg cert.pem


為一個現存的訊息新增一個簽名者:

openssl cms -resign -in mail.msg -signer newsign.pem -out mail2.msg

BUGs:

MIME分離不是非常靈活:似乎是處理更多的被丟棄的訊息,還有可能會造成阻塞。

現在的程式碼僅僅能夠寫出簽名者的證書到檔案:如果簽名者有一個加密證書,則它必須手動地匯出。則有一些探索的功能:怎樣儲存加密證書。

理想的是有一個數據庫來維護每個郵件地址的證書資訊。

現在的程式碼不允許取出SMIMECapabilities簽名屬性中的對稱加密演算法。這就意味著只能手動的改正加密演算法。必須將允許的演算法裝進一個數據庫。

沒有廢除列表來檢查簽名者的證書。

相關推薦

OpenSSL命令---CMS

用途: 該命令處理S/MIME v3.1郵件。可以用它對S/MIME訊息進行加密、解密、簽名、驗證簽名、壓縮以及解壓縮等操作。 用法: openssl cms [-encrypt] [-decrypt] [-sign] [-verify] [-cmsout] [-resig

使用openssl命令制作ecc證書

key onf ecc 用戶 caf conf -o 生成 str # openssl ecparam -out EccCA.key -name prime256v1 -genkey # openssl req -config openssl.cnf -key EccCA.

OpenSSL命令行工具

應用 openssl 數據的加密解密對於Linux系統來說,是至關重要的一個概念,必須懂的對數據進行保護,上次我們詳細說了關於數據加密的種種方式,如公鑰加密,單向加密,密鑰交換等,以及認證機構CA的存在;而OpenSSL命令就是一個可以幫助我們實現公鑰加密,創建私鑰,並根據私鑰創建出公鑰;還可以進

openssl命令雜記

openssl 生成密鑰 雜記 基礎openssl命令行 openssl基礎 顯示openssl版本號 [root@aa ~]# openssl version OpenSSL 1.0.1e-fips 11 Feb 2013 [root@aa ~]# enc [root@aa ~]# whatis enc

openssl命令生成密碼的方法

使用Linux命令生成隨機密碼是一種基本的Linux操作功能,並有多種實現形式,具體使用方式如下: 1. 使用openssl生成隨機密碼 具體用法如下: openssl rand -base64 20 幾乎所有Linux發行版都包含openssl。我們可以利用它的隨機功能來生成可以用

OpenSSL命令詳解

這一針在農信銀2代專案中有幸能碰到加密方面的東西,所以就好好學習了一下。不足之處還請前輩們見諒。 OpenSSL功能遠勝於KeyTool,可用於根證書,伺服器證書和客戶證書的管理 這裡使用的是Win32OpenSSL_Light-1_0_1e.exe http://www.

OpenSSL 命令詳解(二)——摘要演算法、簽名、驗籤

鋒影 email:[email protected] 如果你認為本系列文章對你有所幫助,請大家有錢的捧個錢場,點選此處贊助,贊助額0.1元起步,多少隨意 用什麼摘要演算法指令代替時,預設使用該演算法,但也可以指定其他演算法。 使用指令 

OpenSSL命令---s_client

用途: s_client為一個SSL/TLS客戶端程式,與s_server對應,它不僅能與s_server進行通訊,也能與任何使用ssl協議的其他服務程式進行通訊。 用法: openssl s_client [-host host] [-port port] [-conne

Windows下用openssl命令製作生成證書和自簽名

這些天領導讓我把web service 由原來的HTTP協議改用加密並且加上客戶認證,系統原本用的gsoap,沒辦法只好調查了,現在總結了一些有關openssl生產證書的步驟: 1、 新建工作目錄,將openssl安裝路徑下的apps/CA.pl 和 apps/openss

常用Openssl命令

申請證書 SSL常用於身份驗證、資料加密等應用中,要使用SSL,我們密碼有自己的證書。數字證書一般要向專業的認證公司(如VeriSign)申請,並且都是收費的,某些情況下,我們只是想使用加密的資料通訊,而不在乎認證,這時就可以自己製作一個證書,自己製作一個證書

openssl命令生成證書

也許很多人和本人一樣深有體會,使用OpenSSL庫寫一個加密通訊過程,程式碼很容易就寫出來了,可是整個工作卻花了了好幾天。除將程式編譯成功外(沒有可以使用的證書檔案,編譯成功了,它並不能跑起來,並不表示它能正常使用,所以......),還需生成必要的證書和私鑰檔案使雙方能夠成

OpenSSL命令詳解(一)——標準命令

OpenSSL命令分為以下3個部分。 標準命令Standard commands 1. asn1parse: asn1parse用於解釋用ANS.1語法書寫的語句(ASN一般用於定義語法的構成) 演示命令操作順序:4 -> 5

OpenSSL命令---ciphers

用途: 指令是用來展示用於SSL加密演算法的工具。它能夠把所有openssl支援的加密演算法按照一定規律排列(一般是加密強度)。這樣可以用來做測試工具,決定使用什麼加密演算法。 用法: openssl ciphers [-v] [-ssl2] [-ssl3] [-tls1]

linux之用openssl命令Base64編碼解碼、md5/sha1摘要、AES/DES3加密解密

1、我們先看openssl help命令會輸出什麼? 2、我們用openssl命令實現字串和文字的Base64編碼和解碼 openssl base64 openssl base64 -

使用openssl命令剖析RSA私鑰檔案格式

Openssl提供了強大證書功能,生成金鑰對、證書,頒發證書、生成crl、驗證證書、銷燬證書等。本文將j介紹如何利用openssl的命令分析RSA私鑰檔案格式,同時也將簡單介紹幾種常見的私鑰檔案格式。 1 生成私鑰檔案 openssl有多種方法生成私鑰: genrs

openSSL命令、PKI、CA、SSL證書原理

相關學習資料 http://baike.baidu.com/view/7615.htm?fr=aladdin http://www.ibm.com/developerworks/cn/security/se-pkiusing/index.html?ca=dr

openssl命令列進行RSA加密解密

openssl是一個功能強大的工具包,它集成了眾多密碼演算法及實用工具。我們即可以利用它提供的命令臺工具生成金鑰、證書來加密解密檔案,也可以在利用其提供的API介面在程式碼中對傳輸資訊進行加密。 RSA是一個非對稱加密演算法。簡單說來,非對稱加密演算法就是說加密解密一個

OpenSSL命令列工具驗證RSA加解密

openssl簡介-指令rsa     用法           openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename]           [-passin arg] [-out filename] [-passout

使用openssl命令進行加密解密及雜湊運算的命令

/*********************************************************************  * Author  : Samson  * Date    : 01/05/2014  * Test platform:  *               3.6.1

OpenSSL命令---asn1parse

用途:asn1parse命令是一種用來診斷ASN.1結構的工具,也能用於從ASN1.1資料中提取資料。 用法: openssl asn1parse [-inform PEM|DER] [-in filename] [-out filename] [-noout] [-