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