Step1: 生成公钥和私钥
openssl req -x509 -nodes -days 100000 -newkey rsa:2048 -keyout privatekey.pem -out publickey.pem
Step2: 使用公钥对文件进行加密
openssl smime -encrypt -aes256 -in <file_to_be_encrypted> -binary -outform DEM -out <encrypted_output_file> publickey.pem
Step3: 使用私钥对文件进行解密
openssl smime -decrypt -in <encrypted_file> -binary -inform DEM -inkey privatekey.pem -out <decrypted_output_file>
openssl smime语法
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:
输出格式。一般为SMIME、PEM、DER三种。默认的格式是SMIME。
-content file: 包含分离的上下文路径,它仅仅只能用于verify操作。
-to addr: 有关的邮件信息值头部。接收的地址。
-from ad: 有关的邮件信息值头部。发送的地址。
-subject s: 颁发者信息值。
-text: 打印出S/MIME邮件的各个部件。
-CApath directory: 设置信任CA文件所在路径,此路径中的ca文件名采用特殊的形式:xxx.0,其中xxx为CA证书持有者的哈希值,它通过x509 -hash命令获得。
-CAfile filename: 某文件,里面是所有你信任的CA的证书的内容。当你要建立client的证书链的时候也需要用到这个文件。
-crl_check、-crl_check_all:
检查客户端的证书是否在CA的废除列表中。CRL(s)在证书文件中。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。
openssl使用非对称密钥加密文件