概述: 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签名或加密标准的邮件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 |