密碼學(xué)基礎(chǔ)(四):OpenSSL命令詳解

openssl介紹

密碼學(xué)標(biāo)準(zhǔn)和我們平常所見的互聯(lián)網(wǎng)協(xié)議一樣,是一種大家都遵守的約定和標(biāo)準(zhǔn)龟糕,比如PKCS#1中規(guī)定了 RSA 秘鑰時怎么生成的戴而,公私鑰的格式等內(nèi)容,x509標(biāo)準(zhǔn)規(guī)定了證書的格式等翩蘸。

OpenSSL 本質(zhì)就是一個工具集,按照主流的密碼學(xué)標(biāo)準(zhǔn)實現(xiàn)了常用的加密算法淮逊,證書的生成催首、簽名、驗簽等功能泄鹏。

因為網(wǎng)絡(luò)上的資料比較雜郎任,有的是一些比較老的版本,有的又不完整备籽,所以自己稍加總結(jié)舶治,方便以后重新查閱。而學(xué)習(xí) OpenSSL 的目的只是為了加深對密碼學(xué)基礎(chǔ)內(nèi)容的理解和一些知識點的驗證车猬,不是密碼學(xué)的開發(fā)人員暫時不需要去研究 OpenSSL 源碼霉猛,有這功夫還不如多補補算法、C/C++珠闰、編譯原理惜浅、數(shù)據(jù)結(jié)構(gòu)等底層知識,所以本文只會建立 OpenSSL 大概的使用框架以及主流功能伏嗜,完整的功能及其溯源不再本文討論范圍坛悉。

本文將分三類講述 OpenSSL 指令的使用,其中也只講解常用的指令:dgst承绸、enc裸影、rsa指令集合、req军熏、x509轩猩、pkcs12。CA 指令因為在平時較少使用羞迷,暫不研究界轩。

非對稱加密

OpenSSL 一共實現(xiàn)了4種非對稱加密算法,包括DH算法衔瓮、RSA算法浊猾、DSA算法和橢圓曲線算法(EC)。DH算法一般用戶密鑰交換热鞍。RSA 算法既可以用于密鑰交換葫慎,也可以用于數(shù)字簽名衔彻,當(dāng)然,如果你能夠忍受其緩慢的速度偷办,那么也可以用于數(shù)據(jù)加密艰额。DSA算法則一般只用于數(shù)字簽名, 這里主要演示 RSA 算法椒涯,需要使用DH算法的可以自行研究 pkey 指令集合柄沮。

genrsa指令

genrsa指令雖然已經(jīng)被功能更加全面的genpkey指令取代,但是因為其相對簡單废岂,功能純粹祖搓,可以作為學(xué)習(xí)genpkey的基礎(chǔ)。另外湖苞,genpkey 中的一些更詳細的功能在現(xiàn)階段使用不到拯欧,使用genrsa直接生成私鑰相對簡單方便,容易掌握财骨。其可選參數(shù)如下:

usage: genrsa [args] [numbits]
-out file       output the key to 'file'(輸出的文件名)
-passout arg    output file pass phrase source(給輸出的文件設(shè)置密碼镐作,此處不同于對稱算法加密,對稱算法是對私鑰結(jié)果進行加密隆箩,這里是對文件加密)
-f4             use F4 (0x10001) for the E value(使用65537作為E的值该贾,E在RSA算法中使用場景為:1<e<φ(n) ,默認)
-3              use 3 for the E value(使用3作為E的值捌臊,非默認)

// 以下為對稱加密選項
-des            encrypt the generated key with DES in cbc mode
-des3           encrypt the generated key with DES in ede cbc mode (168 bit key)
-aes128, -aes192, -aes256
                 encrypt PEM output with cbc aes
-camellia128, -camellia192, -camellia256
                 encrypt PEM output with cbc camellia

genrsa接兩個參數(shù)靶庙,第一個選項參數(shù),第二個為rsa算法中的m值的長度娃属,一般為1024六荒,更高安全級別的位2048。其中矾端,如果不設(shè)置對稱加密的算法掏击,則不會對私鑰結(jié)果進行加密,如果不為空秩铆,則會要求輸入對稱算法中將要使用的秘鑰砚亭,使用如下:

1、生成私鑰
openssl genrsa -out private.pem 1024
Generating RSA private key, 1024 bit long modulus
..............++++++
...............................++++++
e is 65537 (0x10001)

得到的結(jié)果為:


私鑰
2殴玛、生成私鑰并使用對稱算法對秘鑰進行加密
openssl genrsa -aes128 -out private.pem 1024
Generating RSA private key, 1024 bit long modulus
....................................................++++++
.................++++++
e is 65537 (0x10001)
Enter pass phrase for private.pem:123456
Verifying - Enter pass phrase for private.pem:123456

結(jié)果:


ase加密之后的私鑰
rsa指令

rsa功能比較多捅膘,可以對秘鑰進行管理。其中最主要的功能就是從私鑰中提取公鑰滚粟、查看秘鑰的結(jié)構(gòu)信息寻仗,可以使用-help查看:

usage: rsa [options]

 -check             檢測秘鑰合法性
 -in file           輸入的文件名
 -inform format    輸入文件的格式 (DER, NET or PEM (default))
 -modulus           打印 RSA 秘鑰的modulus
 -out file          輸出的文件名
 -outform format    輸出文件的格式(DER, NET or PEM (default PEM))
 -passin src        輸入文件的密碼
 -passout src       輸出文件的密碼
 -pubin             該指令說明輸入的是公鑰,默認為私鑰
 -pubout            該指令說明需要輸出公鑰凡壤,默認輸出私鑰
 -sgckey            what it is署尤?
 -text              打印信息

其中耙替,ciphername可選值有-AES-192-CBC等等,可以通過-help指令查看曹体,此處不再列出俗扇。主要功能演示如下:

1、查看秘鑰信息
openssl rsa -in private.pem -text

結(jié)果:


查看秘鑰信息
2箕别、從私鑰中提取公鑰
openssl rsa -in private.pem -pubout -out public.pem
3铜幽、給秘鑰添加/去除/修改對稱加密的密碼
// 為RSA密鑰增加口令保護
openssl rsa -in RSA.pem -des3 -passout pass:123456 -out E_RSA.pem

// 為RSA密鑰去除口令保護
openssl rsa -in E_RSA.pem -passin pass:123456 -out P_RSA.pem

// 修改加密算法為aes128,口令是123456
openssl rsa -in RSA.pem -passin pass:123456 -aes128 -passout pass:123456 -out E_RSA.pem
4串稀、轉(zhuǎn)換秘鑰格式
// 把pem格式轉(zhuǎn)化成der格式啥酱,使用outform指定der格式
openssl rsa -in RSA.pem -passin pass:123456 -des -passout pass:123456 -outform der -out rsa.der
rsautl指令

以上兩個指令時生成和管理秘鑰,而rsautl指令則和秘鑰的具體使用有關(guān)厨诸,也就是如何使用 rsa 秘鑰進行加密解密操作。

Usage: rsautl [options]
// 輸入文件(被加密/解密/簽名)和輸出文件
-in file        被操作的文件
-out file       操作完成后的輸出文件

// 輸入的秘鑰
-inkey file     完成操作時使用到的秘鑰

// 集中填充方式
-ssl            use SSL v2 padding
-raw            use no padding
-pkcs           use PKCS#1 v1.5 padding (default)
-oaep           use PKCS#1 OAEP

// 幾種功能選項
-sign           使用私鑰簽名
-verify         使用公鑰驗簽
-encrypt        使用公鑰加密禾酱,注意是公鑰加密
-decrypt        使用私鑰解密微酬,注意是私鑰解密
-passin arg    如果秘鑰被對稱加密過,則使用該選項提供對稱加密所使用的秘鑰

// 其他
-keyform arg    說明私鑰格式颤陶,默認PEM
-pubin          說明輸入的是公鑰
-certin         輸入的是攜帶rsa公鑰的證書
-hexdump        16進制輸出
1颗管、使用公鑰加密

注意,OpenSSL 中的rsautl指令和pkeyutl指令都只能使用私鑰解密滓走,但是公鑰和私鑰都能用于加密垦江。

也就是說使用私鑰加密時需要用私鑰解密,使用公鑰加密后仍然需要使用私鑰解密搅方。猜測可能的原因是私鑰可以提取公鑰比吭,所以使用私鑰加密后會先分理處公鑰,再使用公鑰加密姨涡?先這么理解吧衩藤,要徹底搞清楚估計要學(xué)習(xí)加密標(biāo)準(zhǔn)及其實現(xiàn)了,指令如下:

openssl rsautl -encrypt -in plain.text -inkey public.pem -out encrypt.text 

備注:
為什么相同的明文涛漂,使用密鑰加密后赏表,每次密文結(jié)果不一樣?因為 RSA 加密的時候根據(jù)填充模式填充隨機數(shù)匈仗,導(dǎo)致每次加密結(jié)果不同瓢剿。

2、使用私鑰解密
openssl rsautl -decrypt -in encrypt.text -inkey private.pem -out replain.text
3悠轩、使用私鑰簽名
openssl rsautl -sign -in plain.text -inkey private.pem -out signed.text
4间狂、使用公鑰驗簽

驗簽的時候需要使用-pubin告知輸入的秘鑰為公鑰

openssl rsautl -verify -in signed.text -pubin -inkey public.pem -out verify.text

摘要算法

摘要算法常用于數(shù)字簽名,數(shù)字簽名嚴(yán)格意義上來講分為兩步:生成摘要和簽名火架。首先使用摘要算法對原文計算摘要前标,然后使用簽名者的私鑰對摘要進行簽名坠韩。

OpenSSL 中的哈希函數(shù)加密主要使用命令dgst,也可以直接使用對應(yīng)算法指令炼列,比如md5只搁,可以直接使用-help來查看選項(實際上是瞎輸入一個不存在的option來被動彈出提示)。然而俭尖,因為openssl版本的原因氢惋,導(dǎo)致命令亂七八糟,比如md5指令還可以指定其他的算法類型稽犁,這就很蛋疼了焰望。

總之就記住一條,只是用dgst指令來加密即可已亥,其使用場景有三個:

1熊赖、計算摘要

計算摘要的格式如下:

openssl dgst [算法名稱] [需要計算摘要的文件] 

其中算法可供選擇的有:-md4、-md5虑椎、-ripemd160震鹉、-sha、-sha1捆姜、-sha224传趾、-sha256、-sha512泥技、-sha384浆兰、-wirlpool等等可以通過openssl dgst -help命令查看

舉個栗子??:

// 進入到對應(yīng)的文件夾中
cd /Users/caoxk/Demo/opensslTest 
// 使用sha1算法對plain.text文件進行摘要計算,其中plain.text中的內(nèi)容為123456
openssl dgst -sha1 plain.text 

結(jié)果:

SHA1(plain.text)= 7c4a8d09ca3762af61e59520943dc26494f8941b

和在線加密的結(jié)果對比:


sha1哈希123456
2珊豹、使用私鑰簽名

仍然遵循 dgst [指令] [文件名]的格式

// 使用默認md5對plain.text進行哈希簸呈,然后使用private.pem私鑰對哈希值進行簽名后以16進制輸出到test.text文件中
openssl dgst -sign private.pem -hex -out test.text plain.text

結(jié)果:


dgst簽名
3、使用公鑰驗證簽名
openssl dgst -verify public.pem -signature test.text plain.text 

結(jié)果:

Verified OK

備注
使用hex輸出后驗證會失敗店茶,hex指令只是用于展示蝶棋,真正使用中需要將hex去掉答毫,同理唠椭,rsa中的-hexdump指令也是如此总珠。

對稱加密

OpenSSL一共提供了8種對稱加密算法菱皆,且支持電子密碼本模式(ECB)乏矾、加密分組鏈接模式(CBC)痕貌、加密反饋模式(CFB)和輸出反饋模式(OFB)四種常用的分組密碼加密模式括丁。這里以AES128的ECB模式做演示凌箕。

enc 指令參數(shù)如下:

usage: enc -ciphername [-AadePp] [-base64] [-bufsize number] [-debug]
    [-in file] [-iv IV] [-K key] [-k password]
    [-kfile file] [-md digest] [-none] [-nopad] [-nosalt]
    [-out file] [-pass arg] [-S salt] [-salt]

 -a/-base64                 使用base64輸出/解密
 -d                 解密
 -e                 加密(默認)
 -debug             打印出debug輸出
 -in file           需要加密/解密的文件
 -iv IV             偏移量鸯檬,ECB模式下不需要
 -K key            對稱加密中使用到的秘鑰决侈,如果不使用-k,則會要求從鍵盤輸入
 -out file          輸出文件
 -p                打印
 -salt             該選項為默認值喧务,意思是默認會隨機加鹽赖歌,使用-nosalt取消加鹽
-S                 手動指定加鹽的值

enc中默認會對 key 進行加鹽操作枉圃,所以和在線 aes 加密的結(jié)果肯定會不同÷耄可以使用 -S 手動指定鹽的值孽亲,但是具體的加鹽算法是什么,不得而知展父,請高手指正返劲。

// 使用aes-128算法,以ecb模式栖茉,對秘鑰123進行默認加鹽操作后篮绿,對plain.text進行對稱加密,結(jié)果輸出到 result.text 中
openssl enc -e -aes-128-ecb -in plain.text -p -k 123 -a  -out result.text
// 鹽
salt=EF3004BF880585F5
// 加鹽之后的key
key=32BDF1964B275BF4F7A344D066E3A23E
// 加密后的base64結(jié)果值
U2FsdGVkX1/vMAS/iAWF9XW23uJDpttgH/3J0n18R30=

解密:

openssl enc -d -aes-128-ecb -in result.text -p -k 123 -a
// 鹽的信息已經(jīng)包含在了result.text文件中吕漂,不需要再次輸入
salt=041C31BA86CA7D29
key=DED2653F37157BC56C7D52919D6FF828
123456

新的非對稱加密指令

openssl更新之后有一個pkey系列的三個指令genpkey亲配、pkeypkeyutl惶凝,和原先的genrsa吼虎、rsarsautl一一對應(yīng)梨睁。

新的指令集只是在原油基礎(chǔ)上對功能進行了合并和擴展,所以這些指令不作為本文重點娜饵,具體使用可以在openssl genpkey -help中查看坡贺,這里只演示最常使用的幾個指令:

1、genpkey生成私鑰
// 使用隨機數(shù)長度為1024的rsa算法生成pem格式的私鑰并輸出到rsa_pri.key文件中箱舞,且在文件中打印私鑰/公鑰參數(shù)/結(jié)構(gòu)的文本
openssl genpkey -out rsa_pri.key -outform PEM -algorithm RSA -pkeyopt rsa_keygen_bits:1024  -text

結(jié)果:


genpkey生成私鑰
2遍坟、pkey從私鑰中提取公鑰

pkey命令處理公鑰或私鑰。它們可以在各種形式之間進行轉(zhuǎn)換晴股,并將其結(jié)構(gòu)打印出來愿伴。其指令如下:

-in file       輸入文件,如果沒有則標(biāo)準(zhǔn)輸入
-inform X       輸入的格式
-passin arg     輸入文件的密碼
-outform X      輸出格式(DER/PEM)
-out file       輸出的文件电湘,如果沒有則標(biāo)準(zhǔn)輸出
-passout arg    輸出文件加密所使用的密碼
-pubin    默認是讀入私鑰隔节,該選項指定讀入公鑰
-pubout    默認情況下會輸出私鑰,使用此選項將會
輸出公鑰寂呛,用于從私鑰生成公鑰
-text    打印公私鑰結(jié)構(gòu)信息

從私鑰中提取公鑰:

openssl pkey -in private.pem -pubout -out public.pem

結(jié)果:


私鑰提取公鑰
3怎诫、pkeyutl 加密解密
// 公鑰加密
openssl pkeyutl -encrypt -in plain.text -inkey public.pem -out encrypt.text

// 私鑰解密
openssl pkeyutl -decrypt -in encrypt.text -inkey private.pem -out decrypt.text
4、pkeyutl 簽名和驗簽
openssl pkeyutl -sign -in plain.text -inkey private.pem -out signed.text

openssl pkeyutl -verify -pubin -inkey public.pem -in plain.text -sigfile signed.text  -out verify.text

證書類

證書的格式相關(guān)的密碼學(xué)標(biāo)準(zhǔn)是PKCS#10贷痪,標(biāo)準(zhǔn)中規(guī)定了 CSR 文件的格式幻妓,req指令就是基于該標(biāo)準(zhǔn),實現(xiàn)了 CSR 文件的生成劫拢、查看肉津、驗證强胰、自簽名等功能。

req指令

req的使用方法為:req [options] <infile >outfile妹沙,其選項有:

[new/x509]

當(dāng)使用`-new`選取的時候偶洋,說明是要生成證書請求,當(dāng)使用x509選項的時候初烘,說明是要生成自簽名證書涡真。

[/key/newkey/keyout]

key和newkey是互斥的,key是指定已有的密鑰文件肾筐,而newkey是指在生成證書請求或者自簽名證書的時候自動生成密鑰哆料,然后生成的密鑰名稱有keyout參數(shù)指定。

當(dāng)指定newkey選項時吗铐,后面指定rsa:bits說明產(chǎn)生rsa密鑰东亦,位數(shù)由bits指定。指定dsa:file說明產(chǎn)生dsa密鑰唬渗,file是指生成dsa密鑰的參數(shù)文件(由dsaparam生成)

[in/out/inform/outform/keyform]

in選項指定證書請求文件典阵,當(dāng)查看證書請求內(nèi)容或者生成自簽名證書的時候使用

out選項指定證書請求或者自簽名證書文件名,或者公鑰文件名(當(dāng)使用pubkey選項時用到)镊逝,以及其他一些輸出信息壮啊。

inform、outform撑蒜、keyform分別指定了in歹啼、out、key選項指定的文件格式座菠,默認是PEM格式狸眼。

[pubkey/noout/text/默認]
text打印請求文件中的所有信息(不包含公鑰),pubkey提取出 csr 文件中的公鑰浴滴,noout不輸出 csr 文件中的 request 內(nèi)容拓萌。默認只打印 request 內(nèi)容。

除上述主要參數(shù)外升略,還有許多其他的參數(shù)微王,不在一一敘述,有興趣的讀者可以查看 req 的man 手冊
1品嚣、生成csr文件

使用private.pem私鑰生成 CSR 文件并輸出骂远,期間會要求輸入個人信息

openssl req -new -key private.pem -out request.csr

使用原有的 RSA 密鑰生成證書請求文件,指定-batch選項腰根,不詢問申請者的信息激才。主體信息由命令行subj指定,且輸出公鑰

openssl req -new -key RSA.pem -passin pass:123456 -out client.pem -subj /C=AU/ST=Some-State/O=Internet -pubkey

自動生成1024位RSA密鑰,并生成證書請求文件瘸恼,指定-nodes文件劣挫,密鑰文件不加密

openssl req -new -newkey rsa:1024 -out client.pem -keyout RSA.pem -subj /C=AU/ST=Some-State/O=Internet -nodes
2、查看/驗證csr文件

默認只會輸出 CSR 內(nèi)容东帅,-text輸出包含 csr 內(nèi)容的所有結(jié)構(gòu)压固,-noout不輸出 csr內(nèi)容

openssl req -in request.csr -noout -text

結(jié)果:


req查看csr文件內(nèi)容
3、提取 csr 文件中的公鑰
openssl req -in request.csr -pubkey

結(jié)果:


csr提取公鑰
4靠闭、生成自簽名證書

-x509需要三個參數(shù):證書請求文件 csr 帐我、證書簽名用到的私鑰、證書輸出文件

// 使用private.pem 私鑰對request.csr的證書請求文件進行簽名并輸出
openssl req -x509 -in request.csr -out client.cer -key private.pem 

結(jié)果:


自簽名證書

查看證書內(nèi)容則在下一個指令x509中講解愧膀。

x509指令

OpenSSL 實現(xiàn)了對證書的X.509標(biāo)準(zhǔn)編解碼拦键、PKCS#12格式的編解碼以及PKCS#7的編解碼功能。并提供了一種文本數(shù)據(jù)庫檩淋,支持證書的管理功能芬为,包括證書密鑰產(chǎn)生、請求產(chǎn)生蟀悦、證書簽發(fā)媚朦、吊銷和驗證等功能。

事實上日戈,OpenSSL 提供的 CA 應(yīng)用程序就是一個小型的證書管理中心(CA)询张,實現(xiàn)了證書簽發(fā)的整個流程和證書管理的大部分機制。

該指令功能豐富浙炼,可以查看證書信息份氧、作為一個偽 CA 機構(gòu)給證書簽名(和req -x509指令一樣)、證書格式轉(zhuǎn)換等鼓拧。因為功能是在太多半火,這里只介紹最主要和常用的功能:

1越妈、查看證書文件信息
// 查看證書格式為DER的Apple.cer文件中的信息季俩,默認證書為PEM格式
openssl x509 -in Apple.cer -text -inform DER

結(jié)果:


證書信息查看
2、查看證書中的公鑰
// 只打印證書中的公鑰梅掠,不打印證書
openssl x509 -in ios_development.cer -inform DER -pubkey -noout
3酌住、轉(zhuǎn)換證書格式
openssl x509 -in apple.cer -inform DER -out cert.pem -outform PEM
4、給 csr 文件簽名

req -x509是相同的阎抒,這里不再贅述酪我。

PKCS12指令

PKCS#標(biāo)準(zhǔn)有1-15個,具體的內(nèi)容可以去網(wǎng)絡(luò)上查閱且叁,后文也會對密碼學(xué)的一些主流標(biāo)準(zhǔn)進行簡析都哭。OpenSSL 就是參照這些標(biāo)準(zhǔn)實現(xiàn)了一些使用的功能。

PKCS#12標(biāo)準(zhǔn)定義了個人身份信息(包括私鑰、證書欺矫、各種秘密和擴展字段)的格式纱新。p12 文件則是個人秘鑰文件,可以只包含私鑰穆趴,也可以包含證書和私鑰脸爱。一般用于用戶在不同設(shè)備間移動他們的個人身份信息。

在iOS中未妹,開發(fā)者通過自己的私鑰生成 csr 文件之后在 apple 官網(wǎng)生成并下載了證書簿废,這個證書只有自己能使用,其他人因為沒有證書對應(yīng)的私鑰络它,所以是不能使用的族檬。于是乎就有了把p12文件共享給別人,其他人在自己電腦上安裝私鑰之后就可以使用對應(yīng)的證書對代碼進行簽名了酪耕。但是貌似新的版本上已經(jīng)不需要共享p12文件了导梆,這個有時間可以去驗證下結(jié)果并探索下原理。

常用功能如下:

1迂烁、從p12文件中提取私鑰

注意看尼,一定要加-nodes,否則默認會要求輸入加密密碼對私鑰進行加密

openssl pkcs12 -in caoxk1107-private.p12 -out private.pem -nodes

不輸入-nodes:

caoxkdeMacBook-Pro:opensslTest caoxk$ openssl pkcs12 -in caoxk1107-private.p12 -out private.pem
// 要求輸入p12文件的密碼
Enter Import Password:
MAC verified OK
// 要求輸入加密導(dǎo)出的PEM文件的密碼
Enter PEM pass phrase:
caoxkdeMacBook-Pro:opensslTest caoxk$ 

結(jié)果:


不輸入-nodes

輸入-nodes:

caoxkdeMacBook-Pro:opensslTest caoxk$ openssl pkcs12 -in caoxk1107-private.p12 -out private.pem -nodes
// 只要求輸入p12文件的密碼
Enter Import Password:
MAC verified OK
caoxkdeMacBook-Pro:opensslTest caoxk$ 

結(jié)果:


從p12中導(dǎo)出私鑰
2盟步、將證書和私鑰合成p12文件
openssl pkcs12 -export -in alicecert.pem -inkey alicekey.pem -certfile cacert.pem -out alice.p12 
3藏斩、查看p12文件

之前的指令中一般使用-text來進行信息的查看,在pkcs12指令中却盘,使用-info來查看 p12 文件的內(nèi)容狰域,需要注意的是,仍然記得帶上-nodes黄橘,否則私鑰會被加密兆览,不予展示。

查看創(chuàng)建 csr 文件時塞关,從私鑰中導(dǎo)出的p12文件:

 openssl pkcs12 -in caoxk1107-private.p12 -nodes -info

結(jié)果:

MAC Iteration 1
MAC verified OK
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
Bag Attributes
    friendlyName: caoxk1107
    localKeyID: 17 E6 1A 74 F3 38 00 05 46 B4 B1 42 18 1A FC 34 9B AB DB 08 
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDRaMHFhRycODXw
D7JBQ8N/JbN/PeXEqLuvXNa9MtCvAf2lhsm90dwyUyfiLcWVHO1Xz2SmySAC3Rpw
6h0XRpGSGCDl7jqx9yFkZwTw/cVco0K4iP473aa+3+x7CboTyrgKEKP+uwEVZINO
/zGIf9QAg2F9dV1A3jxzZYmWvAzmfWq62n76gqUN2Fs0TDFBV0bFUNuw0SUZQpXQ
Ex/j18kGCps+Y8ab0sVy9O+shKUYjdhURwniXJkHI2T0SYMHg844KshWh8FMit74
s7cUkgdPQd09Ubj7oBGN/XfcysMx5tgevXXhw9yqZLv+2dFEVzn6NKvxg7HNBY3u
r/a37fPTAgMBAAECggEAElQA4bDM2D9zORemml+79JzwIOrh+VxrUOXnRZf0+9xI
vvwVHDAJ/b2ZeApZiLuHanAUdySTUKzZa5iSAz+B7i9+caFwMbNXkNoTbKRJadpA
NLaIyeSUe5BNulcXmjPb98WNFPZ5Gc46T+e2BiRqAcF9/uUOzGanE9KHQFIlLucS
riBfYyvJw1S/AVoHvlBk6wldvnB5IRdcHHBdl+bLofBTxkDXcLDikhttxps9ix3P
YecuPEs5TkBiredYO9tJKCPYkcz2rdBioQHCRBsx3LInVzkVHEHrVLBbt9T3wgBA
IA+pliuUeVV/HeelqLGMwYQBlCmSxiZ5/gKF8zQ6wQKBgQDss5BaBg89sP68Rr6J
ba4j72pThoaeO+kYPGNeWKz9zhT3phf81NjxQ/THuJTPJ0bWhoKz58/HP1LTL9W1
lsihU7VNa7kVqOteWTDNkli087Kes5iqoWJVdLrJv2Tn+4EXltX0L5Musquord7v
3AE6dar9aleDzEp0wFr/x7wv5wKBgQDie4yqVLXzXOqnlPXdAsjEx7IC/ysgUsuD
HrvOBzjq9nGilk4IjGgCdzZujn3A80UcPN8boCcrVSDc0qTM8MCqD8t+8yEgRLD6
UA1MgUQfqZKictpsuwsNkQ/2OqUSPkCGUaSqfucCuYJtfxf/vbRfEYkvxShMuI1j
9bewWFqPNQKBgQCgeAOu5FjEzA+GeLeH19GtDwyYX6U39QnLonUDaz6sOmBAnFu6
zlndBuMV228XGVuO6FYHvWpBfA6cmdtaZkTSCjvpptQteP1IU1Mgqsx0sJoxuTQQ
yaQupxpS1+yC0SDtaxbVmsM/b2Wsz2NKXW5/wXIQp115PrBjglyu9yv/lQKBgAaD
oTcg+p7GVGV/jlbOBrJKQB9/8WCboQjjcGlrocJ4VipkAliSmUdA4IrrhEhxdtJq
Gcy0nYvMhgZz9JOEdTYvAB5lpdVExIZemRNTQH9cpEAR56Bq/NVmD7x4UVkl+zsh
zAevYLueVFcL6cfMUAzP908tb4xNXpu6bI8g63HlAoGAQNEzqSzVoLDpeeMUbo5y
OtCcT5p4Rin8VBG/izUFo6vXfeDcQU/VDaegDDokEvrPIGymxu1CHIfqF+E81KrK
cY/YmTkk9q6/jzFfJVQIZ29Y40kPBnEeWc1ij/H0ImwsUmKyvOh2Bq9wiFx4RHw+
LnXrKAC9CEnvZUmpam41UQ0=
-----END PRIVATE KEY-----

查看經(jīng)由鑰匙串中的證書導(dǎo)出的p12文件

openssl pkcs12 -in privateKeyFromKeychain.p12 -info -nodes

結(jié)果:

PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
Bag Attributes
    friendlyName: iPhone Developer: yue hu (ZJ7BM73MA2)
    localKeyID: 17 E6 1A 74 F3 38 00 05 46 B4 B1 42 18 1A FC 34 9B AB DB 08 
subject=/UID=JUNRCFGNSU/CN=iPhone Developer: yue hu (ZJ7BM73MA2)/OU=3BFC8YW44Z/O=Wuhan New World Jewelry Co., Ltd./C=US
issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority
-----BEGIN CERTIFICATE-----
MIIFpzCCBI+gAwIBAgIIKFFF+H2MnPUwDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNV
BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
HhcNMTkxMTA3MDYyNTAwWhcNMjAxMTA2MDYyNTAwWjCBmjEaMBgGCgmSJomT8ixk
AQEMCkpVTlJDRkdOU1UxLjAsBgNVBAMMJWlQaG9uZSBEZXZlbG9wZXI6IHl1ZSBo
dSAoWko3Qk03M01BMikxEzARBgNVBAsMCjNCRkM4WVc0NFoxKjAoBgNVBAoMIVd1
aGFuIE5ldyBXb3JsZCBKZXdlbHJ5IENvLiwgTHRkLjELMAkGA1UEBhMCVVMwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDRaMHFhRycODXwD7JBQ8N/JbN/
PeXEqLuvXNa9MtCvAf2lhsm90dwyUyfiLcWVHO1Xz2SmySAC3Rpw6h0XRpGSGCDl
7jqx9yFkZwTw/cVco0K4iP473aa+3+x7CboTyrgKEKP+uwEVZINO/zGIf9QAg2F9
dV1A3jxzZYmWvAzmfWq62n76gqUN2Fs0TDFBV0bFUNuw0SUZQpXQEx/j18kGCps+
Y8ab0sVy9O+shKUYjdhURwniXJkHI2T0SYMHg844KshWh8FMit74s7cUkgdPQd09
Ubj7oBGN/XfcysMx5tgevXXhw9yqZLv+2dFEVzn6NKvxg7HNBY3ur/a37fPTAgMB
AAGjggHxMIIB7TAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFIgnFwmpthhgi+zr
uvZHWcVSVKO3MD8GCCsGAQUFBwEBBDMwMTAvBggrBgEFBQcwAYYjaHR0cDovL29j
c3AuYXBwbGUuY29tL29jc3AwMy13d2RyMDEwggEdBgNVHSAEggEUMIIBEDCCAQwG
CSqGSIb3Y2QFATCB/jCBwwYIKwYBBQUHAgIwgbYMgbNSZWxpYW5jZSBvbiB0aGlz
IGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2Yg
dGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9u
cyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNhdGlvbiBw
cmFjdGljZSBzdGF0ZW1lbnRzLjA2BggrBgEFBQcCARYqaHR0cDovL3d3dy5hcHBs
ZS5jb20vY2VydGlmaWNhdGVhdXRob3JpdHkvMBYGA1UdJQEB/wQMMAoGCCsGAQUF
BwMDMB0GA1UdDgQWBBQX5hp08zgABUa0sUIYGvw0m6vbCDAOBgNVHQ8BAf8EBAMC
B4AwEwYKKoZIhvdjZAYBAgEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBAFM9T1dB
P5JXQ6cj9QOgLWaIBfdo3WRT/H3ZXBmaIuJVCjlAbK1QORQt3xBgGoqp68fPC6rl
Z/jikrgNuVFt1bsRxM60xkhBMbYKSlGU4SuwJK7vjH5/z1VcEqiep0MRNnFzruih
gahBWFYUhSJ4R87SoszIULxwF8xzZHMqcZgrOkydOSIMhKLgDOGOj80wpvnj/uDP
Mo8EUr1zaIS+T0BBWdnOV5gp7ZOzTT2ws/h0SI79sxVwesUAw8S0d1WjazsiCvSm
MGbHD3lW+3l+4O334l5CKfTSa9HzUMGazio+6GZ3D8KKgW7trfRvhHjqWjjCBLx0
sfXPbULNRAyEFFE=
-----END CERTIFICATE-----
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
Bag Attributes
    friendlyName: caoxk1107
    localKeyID: 17 E6 1A 74 F3 38 00 05 46 B4 B1 42 18 1A FC 34 9B AB DB 08 
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDRaMHFhRycODXw
D7JBQ8N/JbN/PeXEqLuvXNa9MtCvAf2lhsm90dwyUyfiLcWVHO1Xz2SmySAC3Rpw
6h0XRpGSGCDl7jqx9yFkZwTw/cVco0K4iP473aa+3+x7CboTyrgKEKP+uwEVZINO
/zGIf9QAg2F9dV1A3jxzZYmWvAzmfWq62n76gqUN2Fs0TDFBV0bFUNuw0SUZQpXQ
Ex/j18kGCps+Y8ab0sVy9O+shKUYjdhURwniXJkHI2T0SYMHg844KshWh8FMit74
s7cUkgdPQd09Ubj7oBGN/XfcysMx5tgevXXhw9yqZLv+2dFEVzn6NKvxg7HNBY3u
r/a37fPTAgMBAAECggEAElQA4bDM2D9zORemml+79JzwIOrh+VxrUOXnRZf0+9xI
vvwVHDAJ/b2ZeApZiLuHanAUdySTUKzZa5iSAz+B7i9+caFwMbNXkNoTbKRJadpA
NLaIyeSUe5BNulcXmjPb98WNFPZ5Gc46T+e2BiRqAcF9/uUOzGanE9KHQFIlLucS
riBfYyvJw1S/AVoHvlBk6wldvnB5IRdcHHBdl+bLofBTxkDXcLDikhttxps9ix3P
YecuPEs5TkBiredYO9tJKCPYkcz2rdBioQHCRBsx3LInVzkVHEHrVLBbt9T3wgBA
IA+pliuUeVV/HeelqLGMwYQBlCmSxiZ5/gKF8zQ6wQKBgQDss5BaBg89sP68Rr6J
ba4j72pThoaeO+kYPGNeWKz9zhT3phf81NjxQ/THuJTPJ0bWhoKz58/HP1LTL9W1
lsihU7VNa7kVqOteWTDNkli087Kes5iqoWJVdLrJv2Tn+4EXltX0L5Musquord7v
3AE6dar9aleDzEp0wFr/x7wv5wKBgQDie4yqVLXzXOqnlPXdAsjEx7IC/ysgUsuD
HrvOBzjq9nGilk4IjGgCdzZujn3A80UcPN8boCcrVSDc0qTM8MCqD8t+8yEgRLD6
UA1MgUQfqZKictpsuwsNkQ/2OqUSPkCGUaSqfucCuYJtfxf/vbRfEYkvxShMuI1j
9bewWFqPNQKBgQCgeAOu5FjEzA+GeLeH19GtDwyYX6U39QnLonUDaz6sOmBAnFu6
zlndBuMV228XGVuO6FYHvWpBfA6cmdtaZkTSCjvpptQteP1IU1Mgqsx0sJoxuTQQ
yaQupxpS1+yC0SDtaxbVmsM/b2Wsz2NKXW5/wXIQp115PrBjglyu9yv/lQKBgAaD
oTcg+p7GVGV/jlbOBrJKQB9/8WCboQjjcGlrocJ4VipkAliSmUdA4IrrhEhxdtJq
Gcy0nYvMhgZz9JOEdTYvAB5lpdVExIZemRNTQH9cpEAR56Bq/NVmD7x4UVkl+zsh
zAevYLueVFcL6cfMUAzP908tb4xNXpu6bI8g63HlAoGAQNEzqSzVoLDpeeMUbo5y
OtCcT5p4Rin8VBG/izUFo6vXfeDcQU/VDaegDDokEvrPIGymxu1CHIfqF+E81KrK
cY/YmTkk9q6/jzFfJVQIZ29Y40kPBnEeWc1ij/H0ImwsUmKyvOh2Bq9wiFx4RHw+
LnXrKAC9CEnvZUmpam41UQ0=
-----END PRIVATE KEY-----

備注
從結(jié)果中可以清晰的看出抬探,經(jīng)由鑰匙串中已經(jīng)安裝成功的證書(有何證書中配套的私鑰才能安裝成功),導(dǎo)出之后的 p12 文件中包含證書+私鑰帆赢。而生成 CSR 文件時的私鑰中導(dǎo)出的 p12 文件只包含私鑰小压。

CA指令

CA指令相當(dāng)于 OpenSSL 在內(nèi)部實現(xiàn)了一個小型的 CA 系統(tǒng),簽發(fā)證書請求和生成CRL椰于,維護一個已簽發(fā)證書狀態(tài)的文本數(shù)據(jù)庫怠益,因為實際使用中較少,本文不討論該指令的使用瘾婿。

下回分解

至此蜻牢,OpenSSL 主要的功能介紹完畢烤咧,其中如有錯誤,強烈歡迎指正抢呆!另外髓削,man comman到底怎么使用?No manual entry for rsa怎么解決镀娶?如果有高手知道立膛,也請告知,萬分感謝梯码!

后文會對一些名詞做出解釋和總結(jié)宝泵,還會結(jié)合iOS中證書的申請、HTTPS的使用轩娶、iOS簽名機制做出實踐儿奶。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鳄抒,隨后出現(xiàn)的幾起案子闯捎,更是在濱河造成了極大的恐慌,老刑警劉巖许溅,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓤鼻,死亡現(xiàn)場離奇詭異,居然都是意外死亡贤重,警方通過查閱死者的電腦和手機茬祷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來并蝗,“玉大人祭犯,你說我怎么就攤上這事」鐾#” “怎么了沃粗?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長键畴。 經(jīng)常有香客問我最盅,道長,這世上最難降的妖魔是什么镰吵? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任檩禾,我火速辦了婚禮挂签,結(jié)果婚禮上疤祭,老公的妹妹穿的比我還像新娘。我一直安慰自己饵婆,他們只是感情好勺馆,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布戏售。 她就那樣靜靜地躺著,像睡著了一般草穆。 火紅的嫁衣襯著肌膚如雪灌灾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天悲柱,我揣著相機與錄音锋喜,去河邊找鬼。 笑死豌鸡,一個胖子當(dāng)著我的面吹牛嘿般,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涯冠,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼炉奴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蛇更?” 一聲冷哼從身側(cè)響起瞻赶,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎派任,沒想到半個月后砸逊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡掌逛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年痹兜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颤诀。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡字旭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出崖叫,到底是詐尸還是另有隱情遗淳,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布心傀,位于F島的核電站屈暗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏脂男。R本人自食惡果不足惜养叛,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宰翅。 院中可真熱鬧弃甥,春花似錦、人聲如沸汁讼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瓶珊,卻和暖如春啸箫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伞芹。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工忘苛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唱较。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓柑土,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绊汹。 傳聞我的和親對象是個殘疾皇子稽屏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容