OpenSSL命令---smime

用途:

S/MIME工具,用于处理S/MIME邮件,它能加密、解密、签名和验证S/MIME消息。

用法:

openssl smime [-encrypt] [-decrypt] [-sign] [-verify] [-pk7out] [-nointern] [-nosigs] [-noverify] [-nocerts] 
[ -nodetach] [-noattr] [-binary] [-in file] [-inform SMIME|PEM|DER] [-certfile file] [-signer file] [-recip file] 
[-passin arg] [-inkey file] [-keyform PEM |ENGINE] [-out file] [-outform SMIME|PEM|DER] [-content file] 
[-to addr] [-from ad] [-subject s] [-text] [-CApath directory] [-CAfile filename] [-crl_check] [-crl_check_all] 
[-indef] [-noindef] [-stream] [-rand file(s)] [-md digest] [cert.pem…] [-des] [-des3] [-rc2-40] 
[-rc2-64] [-rc2-128]

选项说明:

-encrypt:用给定的接受者的证书加密邮件信息。输入文件是一个消息值,用于加密。输出文件是一个已经被加密了的MIME格式的邮件信息。

-decrypt:用提供的证书和私钥值来解密邮件信息值。从输入文件中获取到已经加密了的MIME格式的邮件信息值。解密的邮件信息值被保存到输出文件中。

-sign:用提供的证书和私钥值来签名邮件信息值。输入文件是一个消息值,用于签名。输出文件是一个已经被签名了的MIME格式的邮件信息。

-verify:验证已经签名了的邮件信息值。输入文件和输出文件都是已经签名了的邮件信息值。同时支持清除文本以及不透明的签名。

-pk7out:将一个PEM格式的输入信息转换为PKCS#7结构。

-nointern:对签名者来说,不从消息中查找证书。

-nosigs:不去验证签名值。

-noverify:不去验证签名者的证书信息。

-nocerts:当签名的时候不包含签名者的证书信息值。

-nodetach:用不透明的签名。

-binary:不转换二进制消息到文本消息值。

-in file:输入消息值,它一般为加密了的以及签名了的MINME类型的消息值。

-inform SMIME|PEM|DER:输入消息的格式。一般为SMIME|PEM|DER三种。默认的是SMIME

-certfile filename:添加filename中所有的证书信息值。

-signer file:一个签名证书,当签名或放弃一个签名数据时使用。这个选项可以被用多次。如果一个消息已经被验证并验证通过,则将签名者的证书放到file中。

-recip file:存放提供者的证书,主要用于解密消息值。这个证书必须匹配多个提供者的消息。

-passin arg:私钥保护口令来源。

-inkey file:私钥存放地址,主要用于签名或解密数据。这个私钥值必须匹配相应的证书信息。如果这个选项没有被指定,私钥必须包含到证书路径中(-recip-signer)。

-keyform PEM |ENGINE:私钥格式。一般为PEM ENGINE格式。

-out file:已经被解密或验证通过的数据的保存位置。

-outform SMIME|PEM|DER:输出格式。一般为SMIMEPEMDER三种。默认的格式是SMIME

-content file:包含分离的上下文路径,它仅仅只能用于verify操作。

-to addr:有关的邮件信息值头部。接收的地址。

-from ad:有关的邮件信息值头部。发送的地址。

-subject s:颁发者信息值。

-text:打印出S/MIME邮件的各个部件。

-CApath directory:设置信任CA文件所在路径,此路径中的ca文件名采用特殊的形式:xxx.0,其中xxxCA证书持有者的哈希值,它通过x509 -hash命令获得。

-CAfile filename:某文件,里面是所有你信任的CA的证书的内容。当你要建立client的证书链的时候也需要用到这个文件。

-crl_check-crl_check_all:检查客户端的证书是否在CA的废除列表中。CRLs)在证书文件中。crl_check_all表示要检查所有的CA证书中的废除列表。

-indef-stream:这两个选项对I/O流进行编码操作。

-noindef:不对数据进行编码操作。

-md digest:当签名或放弃签名操作时用的摘要算法。默认的摘要算法为sha1

-rand file(s):指定随机数种子文件,多个文件间用分隔符分开,windows用“;”,OpenVMS用“,“,其他系统用“:”。

cert.pem:提供者的证书信息。

-des, -des3, -seed, -rc2-40, -rc2-64, -rc2-128, -aes128, -aes192, -aes256-camellia128, -camellia192, -camellia256:指定的私钥保护加密算法。默认的算法是rc2-40

注意:

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:在创建PKCS#7文件或读取MIME格式消息时出错。

4:解密或验证签名时出现错误。

5:消息已经被验证但是一个错误发生。

实例:

创建一个签名的消息:

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


创建一个不透明的签名消息:

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


创建一个签名的消息,包含很多附加证书和读取私钥文件从其它文件中:

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

有两个签名者对消息签名:

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


Unix目录发送一个签名了的消息,包含头部:

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

验证一个已签名的消息,如果已经成功,提取签名者的证书:

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


发送用3DES加密了的数据:

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

签名并加密邮件信息值:

openssl smime -sign -in ml.txt -signer my.pem –text  

openssl smime -encrypt -out mail.msg -from [email protected] -to someone@somewhere -subject "Signed and Encrypted message" -des3 user.pem

注意:加密的命令中不包含-text选项,因为消息已经被加密了的并包含了MIME头部。

解密邮件信息:

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


Netscape格式的输出表单是一个经过PKCS#7结构签名了的。你可以用这个项目来验证签名值:

-----BEGIN PKCS7-----

-----END PKCS7-----

用下面的命令:

openssl smime -verify -inform PEM -in signature.pem -content content.txt

可以用base64解码签名值:

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


128位的Camellia算法创建一个加密的消息:

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


对一个现存的消息添加一个签名者:

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


BUGs:

MIME分离不是非常灵活:似乎是处理更多的被丢弃的消息,还有可能会造成阻塞。

现在的代码仅仅能够写出签名者的证书到文件:如果签名者有一个加密证书,则它必须手动地导出。则有一些探索的功能:怎样保存加密证书。

理想的是有一个数据库来维护每个邮件地址的证书信息。

现在的代码不允许取出SMIMECapabilities签名属性中的对称加密算法。这就意味着只能手动的改正加密算法。必须将允许的算法装进一个数据库。

没有废除列表来检查签名者的证书。

你可能感兴趣的:(OpenSSL,SMIME工具,s_mime)