openssl系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html
主要用於輸出證書信息,也能夠簽署證書請求文件、自簽署、轉換證書格式等。
openssl x509工具不會使用openssl配置文件中的設定,而是完全需要自行設定或者使用該偽命令的默認值,它就像是一個完整的小型的CA工具箱。
openssl x509 [-in filename] [-out filename] [-serial] [-hash] [-subject_hash] [-issuer_hash] [-subject] [-issuer]
[-nameopt option] [-email] [-startdate] [-enddate] [-purpose] [-dates] [-modulus] [-pubkey] [-fingerprint] [-noout]
[-days arg] [-set_serial n] [-signkey filename] [-x509toreq] [-req] [-CA filename] [-CAkey filename] [-CAcreateserial]
[-CAserial filename] [-text] [-md2|-md5|-sha1|-mdc2] [-extfile filename] [-extensions section]
選項非常多,所以分段解釋。
【輸入輸出選項:】 -in filename :指定證書輸入文件,若同時指定了"-req"選項,則表示輸入文件為證書請求文件。 -out filename :指定輸出文件 -md2|-md5|-sha1|-mdc2:指定單向加密的算法。
【信息輸出選項:】 -text:以text格式輸出證書內容,即以最全格式輸出, :包括public key,signature algorithms,issuer和subject names,serial number以及any trust settings. -certopt option:自定義要輸出的項 -noout :禁止輸出證書請求文件中的編碼部分 -pubkey :輸出證書中的公鑰 -modulus :輸出證書中公鑰模塊部分 -serial :輸出證書的序列號 -subject :輸出證書中的subject -issuer :輸出證書中的issuer,即頒發者的subject -subject_hash :輸出證書中subject的hash碼 -issuer_hash :輸出證書中issuer(即頒發者的subject)的hash碼 -hash :等價於"-subject_hash",但此項是為了向后兼容才提供的選項 -email :輸出證書中的email地址,如果有email的話 -startdate :輸出證書有效期的起始日期 -enddate :輸出證書有效期的終止日期 -dates :輸出證書有效期,等價於"startdate+enddate" -fingerprint :輸出指紋摘要信息
輸出證書某些信息的時候,可以配合"-noout"選項,然后再指定某些項來使用。例如:
[root@xuexi ~]# openssl x509 -in cert.pem -noout -text [root@xuexi ~]# openssl x509 -in cert.pem -noout -serial [root@xuexi ~]# openssl x509 -in cert.pem -noout -subject [root@xuexi ~]# openssl x509 -in cert.pem -noout -issuer [root@xuexi ~]# openssl x509 -in cert.pem -noout -fingerprint [root@xuexi ~]# openssl x509 -in cert.pem -noout -issuer_hash [root@xuexi ~]# openssl x509 -in cert.pem -noout -startdate -enddate
【簽署選項:】 ***************************************************************************************** * 偽命令x509可以像openssl ca一樣對證書或請求執行簽名動作。注意,openssl x509 * * 不讀取配置文件,所有的一切配置都由x509自行提供,所以openssl x509像是一個"mini CA" * ***************************************************************************************** -signkey filename:該選項用於提供自簽署時的私鑰文件,自簽署的輸入文件"-in file"的file可以是證書請求文件,也可以是已簽署過的證書。-days arg:指定證書有效期限,默認30天。 -x509toreq:將已簽署的證書轉換回證書請求文件。需要使用"-signkey"選項來傳遞需要的私鑰。 -req:x509工具默認以證書文件做為inputfile(-in file),指定該選項將使得input file的file為證書請求文件。 -set_serial n:指定證書序列號。該選項可以和"-singkey"或"-CA"選項一起使用。 :如果和"-CA"一起使用,則"-CAserial"或"-CAcreateserial"選項指定的serial值將失效。 :序列號可以使用數值或16進制值(0x開頭)。也接受負值,但是不建議。 -CA filename :指定簽署時所使用的CA證書。該選項一般和"-req"選項一起使用,用於為證書請求文件簽署。 -CAkey filename :設置CA簽署時使用的私鑰文件。如果該選項沒有指定,將假定CA私鑰已經存在於CA自簽名的證書文件中。 -CAserial filename:設置CA使用的序列號文件。當使用"-CA"選項來簽名時,它將會使用某個文件中指定的序列號來唯一標識此次簽名后的證書文件。 :這個序列號文件的內容僅只有一行,這一行的值為16進制的數字。當某個序列號被使用后,該文件中的序列號將自動增加。 :默認序列號文件以CA證書文件基名加".srl"為后綴命名。如CA證書為"mycert.pem",則默認尋找的序列號文件為"mycert.srl" -CAcreateserial :當使用該選項時,如果CA使用的序列號文件不存在將自動創建:該文件將包含序列號值"02"並且此次簽名后證書文件序列號為1。 :一般如果使用了"-CA"選項而序列號文件不存在將會產生錯誤"找不到srl文件"。 -extfile filename :指定簽名時包含要添加到證書中的擴展項的文件。
【CERTIFICATE EXTENSIONS】 -purpose:選項檢查證書的擴展項並決定該證書允許用於哪些方面,即證書使用目的范圍。 basicConstraints:該擴展項用於決定證書是否可以當作CA證書。格式為basicConstraints=CA:true | false :1.如果CA的flag設置為true,那么該證書允許作為一個CA證書,即可以頒發下級證書或進行簽名; :2.如果CA的flag設置為false,那么該證書就不能作為CA,不能為下級頒發證書或簽名; :3.所有CA的證書中都必須設置CA的flag為true。 :4.如果basicConstraints擴展項未設置,那么證書被認為可疑的CA,即"possible CA"。 keyUsage:該擴展項用於指定證書額外的使用限制,即也是使用目的的一種表現方式。 :1.如果keyUsage擴展項被指定,那么該證書將又有額外的使用限制。 :2.CA證書文件中必須至少設置keyUsage=keyCertSign。 :3.如果設置了keyUsage擴展項,那么不論是否使用了critical,都將被限制在指定的使用目的purpose上。
例如,使用x509工具自建CA。由於x509無法建立證書請求文件,所以只能使用openssl req來生成請求文件,然后使用x509來自簽署。自簽署時,使用"-req"選項明確表示輸入文件為證書請求文件,否則將默認以為是證書文件,再使用"-signkey"提供自簽署時使用的私鑰。
[root@xuexi ssl]# openssl req -new -keyout key.pem -out req.csr [root@xuexi ssl]# openssl x509 -req -in req.csr -signkey key.pem -out x509.crt
x509也可以用來簽署他人的證書請求,即為他人頒發證書。注意,為他人頒發證書時,確保serial文件存在,建議使用自動創建的選項"-CAcreateserial"。
[root@xuexi ssl]# openssl x509 -req -in req.csr -CA ca.crt -CAkey ca.key -out x509.crt -CAcreateserial