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é)果:
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é)果對比:
2珊豹、使用私鑰簽名
仍然遵循 dgst [指令] [文件名]的格式
// 使用默認md5對plain.text進行哈希簸呈,然后使用private.pem私鑰對哈希值進行簽名后以16進制輸出到test.text文件中
openssl dgst -sign private.pem -hex -out test.text plain.text
結(jié)果:
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
亲配、pkey
、pkeyutl
惶凝,和原先的genrsa
吼虎、rsa
、rsautl
一一對應(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é)果:
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é)果:
3、提取 csr 文件中的公鑰
openssl req -in request.csr -pubkey
結(jié)果:
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:
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é)果:
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簽名機制做出實踐儿奶。