http://www.openssl.org/docs/apps/openssl.html
[bingo]openssl文档笔记一
MSN: lubin_cn@hotmail.com
概述: OpenSSL是一个实现了SSL(Secure Sockets Layer v2/v3)和TLS(Transport Layer Security v1)协议以及相关密码标准的工具包。
openssl程序用来在命令行模式下使用OpenSSL的密码函数。它的功能有:
a) 创建RSA、DH、DSA密钥
b) 创建X.509证书、CSRs以及CRLs
c) 计算摘要
d) 对称密钥的加解密
e) SSL/TLS的客户端、服务端的测试
f) 处理S/MIME签名或加密标准的邮件
1. asn1parse 用来解析ASN1编码的数据
asn1parse [options]<infile
-inform DER|TXT|PEM 输入格式
-in filename
-out filename 通常是DER编码
-noout 不输出
-offset number 开始解析的位置
-length number 需要解析的字节数
-i 缩进(indent)
-dump 对不可见数据显示16进制
asn1parse -inform DER -in ca.cer -i
显示结果:xx: 冒号前的代表起始字节数,d: 深度(用于缩进),hl: TLV种的TL,l: TLV中的L
0:d=0 hl=3 l= 137 cons: SEQUENCE
3:d=1 hl=3 l= 129 prim: INTEGER :E5D21E1F5C8D20.....
135:d=1 hl=2 l= 3 prim: INTEGER :010001
2. ca 一个很小的CA应用程序,可以签发证书,产生CRL,将状态等信息保存在TXT中。
ca args
a) CA OPTIONS
-config filename 指定配置文件
-name 指定配置文件中的哪一部分被使用
-in filename 需要被CA签发的证书请求
-infiles file1 file2 对多个文件的处理
-ss_cert filename 用于自签名self signed..
-out filename 默认为标准输出
-outdir directory
-cert filename CA证书文件
-keyfile filename 用于签名的私钥文件
-key password 保护私钥的口令(不推荐使用该参数)
-verbose 打印详细的过程
-startdate date 格式YYMMDDHHMMSSZ
-enddate date 格式YYMMDDHHMMSSZ
-days arg 过期的天数
-md alg 摘要算法。md5,sha1等
-policy arg 指定配置文件中使用哪部分策略
-preserveDN 反转DN。。 :)
-noemailDN DN中去掉email
-batch 系统将不再需要用户干预(输入)自动处理
-extensions section 指定扩展信息使用配置文件中的哪部分
-extfile file 扩展信息从文件中读取
b) CRL OPTIONS
-gencrl
-crldays num 下个CRL发布的时间间隔
-crlhours num
-revoke filename 撤销一个证书
-crl_reason reason 撤销的原因
-crl_hold instruction 撤销的原因代码
3. crl 处理DER和PEM编码的CRL文件
crl [options]
-inform DER|PEM
-outform DER|PEM
-in filename
-out filename
-text 文本方式显示出CRL
-noout
-issuer 输出签发者DN
-lastupdate
-nextupdate
-CAfile file 给出CA验证CRL
-CApath dir 在给定目录下验证CRL,该目录必须是标准的证书目录(x509 -hash)
4. dgst 计算摘要,并用来进行签名和验签。
dgst [-md5|-md4|-md2|-sha1|-sha|-dss1] [options] [file...]
-c 分开显示摘要值,16进制的被使用
-d 打印BIO调试信息
-hex 摘要用16进制输出
-binary 摘要用2进制输出
-out filename
-sign filename 使用该文件(私钥)签名摘要值
-passin arg 私钥的口令
-verify filename 使用该文件(公钥)验证签名。输出验签成功或者失败的信息。
-prverify filename 使用该文件(私钥)验证签名。
-signature filename
-rand file(s) 一个或多个用来产生随机数种子的文件数据
file(s)... 需要进行摘要的文件
5. enc 对数据进行对称算法的加解密,以及Base64的编码解码。
enc -ciphername [options]
a) ciphername用来标识算法,支持的算法有base64, bf, cast, des, des3, idea, rc2, rc4, rc5等。
b) options
-in filename
-out filename
-e / -d 加密 / 解密
-a 对输入(加密后)/输出(解密后)的数据进行Base64后再处理
-k password 口令被用来产生密钥
-kfile filename
-K arg 密钥通过16进制输入
-iv arg iv通过16进制输入
-[pP] 打印出key以及iv
6. errstr 解释openssl运行中返回的错误代码。
返回:27594:error:2006D080:lib(32):func(109):reason(128):bss_file.c:107:
解释:openssl errstr 2006D080
7. genrsa 用来产生RSA公私钥对
genrsa [options] numbits
-out filename
-des|-des3|-ides... 保护私钥的方式
-F4|-3 指定e是65537或者3
numbits 模长,1024,2048等
8. pkcs12 产生或解析PKCS#12(.pfx)文件
pkcs [options]
a) 解析参数
-in filename 输入P12文件
-out filename 以PEM输出证书和私钥文件
-noout
-clcerts 只输出用户证书
-cacerts 只输出CA证书
-nokeys 不输出私钥
-des / -des3 / -idea 加密输出私钥
-nodes 不加密私钥输出
-nomacver 不做MAC验证
b) 创建文件参数
-export 用来创建P12文件而非解析
-out filename
-in filename 以PEM输入证书和私钥文件
-inkey filename 指定私钥文件,如果不使用,则私钥包含在-in中
-name friendlyname 为证书以及私钥指定一个别名
-caname friendlyname 为其余的证书指定一个别名
-certfile filename 读入额外的证书文件
-chain 将加入用户证书的整条证书链
-descert 使用3DES加密证书
9. pkcs7 处理DER或PEM的PKCS7文件
pkcs7 [options]
-inform DER|PEM 默认为PEM
-outform DER|PEM
-in filename
-out filename
-print_certs 打印出文件中所有的证书和CRL
-text 显示出证书的详细信息,不只是subject和issuer name
-noout
10. req 处理和创建PKCS#10标准的证书请求,也能做为根CA创建根证书。
req [options]
-inform DER|PEM
-outform DER|PEM
-in filename
-out filename
-text 以文本方式打印出证书请求信息
-pubkey 输出公钥
-noout
-modulus 输出证书请求中公钥的模长
-verify 验证证书请求
-new 创建证书请求。如果没有-key参数,那么将产生一对新的RSA私钥。
-newkey arg 创建新的证书请求和新的私钥。参数可以为rsa:nbits,nbits为密钥长度。
-key filename 指定私钥文件,默认为PKCS#8的PEM格式。
-keyform PEM|DER 和-key对应,指定私钥格式。
-keyout filename 用于输出新创建的私钥文件。
-nodes 输出的私钥不加密
-md5|sha1|md2|mdc2 签名请求所使用的摘要算法。
-config filename 从中读取配置文件
-subj arg 设置新证书请求的subject
-x509 用来表明创建自签的根证书,而不是证书请求。
-days n 当-x509使用时,用来标识证书的过期时间。默认为30天。
-set_serial n 当产生根证书的时候,用来指定证书序列号
-reqexts section 用来指明使用的证书扩展项或者证书请求扩展项
-batch 无交互模式non-interactive mode
openssl req -x509 -newkey rsa:1024 -keyout cakey.pem -out ca.pem 产生一个CA根证
11. rsa 用来处理RSA密钥,能在不同的格式之间转换,并打印出其中的参数。
rsa [options]
-inform DER|PEM|NET
-outform DER|PEM|NET
-in filename
-out filename
-des|-des3|-idea 导出私钥所使用的加密算法
-text 以文本方式打印出公私钥的详细信息
-modulus 输出模长
-check 检查私钥的健壮性
-pubin 默认是私钥在-in中被读入,该参数指定公钥被读入
-pubout 当-pubin时,默认就使用了-pubout
12. rsautl 可以用RSA来进行签名、验签、加解密。
rsautl [options]
-in filename
-out filename
-inkey file 输入的密钥文件,默认为私钥
-pubin 指明-inkey中输入的是公钥
-certin 指明-inkey中输入的是证书(包含公钥)
-sign 签名-in,输出到-out
-verify 验签
-encrypt 使用RSA公钥加密
-decrypt 使用RSA私钥解密
-pkcs|-oaep|-ssl|-raw 填充方式,默认为PKCS#1 v1.5的填充
-hexdump 16进制输出
-asn1parse 使用ASN.1解析输出数据,经常和-verify连起来用
13. smime 用来处理S/MIME邮件,包括加解密,签名验签。
smime [options]
五种操作中需要选择一种,其余的参数和该操作相关联:
-encrypt
-decrypt
-sign
-verify
-pk7out
其余参数:
-in filename 输入MIME消息,或者是被加密、签名过的消息
-inform SMIME|PEM|DER 当输入为P7格式时,使用该参数,默认为SMIME
-out filename
-outform SMIME|PEM|DER
-content filename 在-verify中使用,指定的文件包含额外的文件内容。用于不包含原文的P7签名。
-text 为加密或者签名后的数据添加MIME的TEXT文头
-CAfile file 在-verify中使用
-CApath dir 在-verify中使用,给定目录下包含CA证书,该目录必须是标准的证书目录(x509 -hash)
-des|-rc2-64|-aes128|... 指定加密算法
-nointern 在-verify一个消息时,证书不包含在输入中,用-certfile指定。
-nochain 不进行证书链的验证
-nosigs 不验签
-nocerts 消息中不包含证书,需要用-certfile指定
-noattr 不包含属性,比如签名时间,算法等
-binary 当MIME中包含不规范的二进制数据的时候使用
-nodetach 使用opaque签名。
-certfile file 指定额外的证书,PEM格式。
-signer file 签名时指定签名者证书,验签时输出签名者证书
-recip file 指定解密消息时候的接收者证书,该证书必须和消息中包含的证书匹配
-inkey file 指定签名或者解密时候的私钥
cert.pem... 加密消息时候,指定一个或多个接收者证书
-to, -from, -subject SMIME中相关的邮件头信息
14. verify 验证证书链
verify [options]
-CApath directory 一个可信的证书存放目录。证书或者其链接的名字格式为hash.0(hash为证书subject的hash值),在UNIX中的c_rehash脚本就可以完成这些操作(redhat里好像没有? -_-!)。
-CAfile file 一个可信证书的文件,该文件可以存放多个PEM格式的证书。
-untrusted file 一个不可信的证书文件。
-purpose purpose 证书用途。
-issuer_check 打印出当前证书签发者证书的验证信息。
- 标识最后的参数。后面的参数都为需要验证的证书。
certificates 需要验证的证书
15. x509 显示证书信息,转换证书格式,签发证书。
x509 [options]
a) 输入、输出,以及通用的参数
-inform DER|PEM|NET
-outform DER|PEM|NET
-in filename 默认输入的是证书,而非证书请求
-out filename
-md2|-md5|-sha1|-mdc2
b) 显示选项
-text 文本方式显示证书信息
-certopt option 定制-text的输出格式,option之间可以用逗号分隔
-noout
-modulus 显示证书里面公钥的模长
-serial 显示证书序列号
-subject_hash 输出证书中subject DN的HASH值,OpenSSL通过这个来在一个目录中检索证书
-issuer_hash 输出证书中签发者DN的HASH值
-nameopt option 决定是谁的DN被显示
-email 输出email地址
-startdate 输出证书起始时间
-enddate 输出证书中止时间
-dates 输出证书起止时间
-fingerprint 输出整个证书的DER编码的摘要
-C 用Cpp的形式输出证书
c) 签名参数
-signkey filename 用指定的私钥文件进行自签名。如果-in输入一个证书,那么就将subject DN替换成issuer DN,并且修改公钥和起止时间,如果没有-clrext那么所有的证书扩展项被保留。如果-in输入一个证书请求,那么就产生一个自签名的证书。
-clrext 删除-signkey签名证书时候的证书扩展项。
-keyform PEM|DER 标识-signkey指定的私钥格式
-days arg 标识证书过期的时间。默认为30天。
-x509toreq 将一个证书转换成证书请求,-signkey指定证书请求使用的私钥。
-req 标识输入的是一个证书请求,而非证书
-set_serial n 设置证书序列号
-CA filename 标识被用来签名的CA证书,它的subject DN将被做为签发证书的issuer DN。
-CAkey filename 和CA证书对应的CA私钥
-CAserial filename 用来标识存放CA序列号的文件,产生证书时需要的序列号可以从该文件中取出,并自增。
-CAcreateserial 如果CA序列号文件不存在,将创建。
-extfile filename 指定签发证书时候使用的扩展项。
-extensions section 扩展项文件中使用的section