密碼學標準和咱們日常所見的互聯網協議同樣,是一種你們都遵照的約定和標準,好比PKCS#1中規定了 RSA 祕鑰時怎麼生成的,公私鑰的格式等內容,x509標準規定了證書的格式等。node
OpenSSL 本質就是一個工具集,按照主流的密碼學標準實現了經常使用的加密算法,證書的生成、簽名、驗籤等功能。ios
由於網絡上的資料比較雜,有的是一些比較老的版本,有的又不完整,因此本身稍加總結,方便之後從新查閱。而學習 OpenSSL 的目的只是爲了加深對密碼學基礎內容的理解和一些知識點的驗證,不是密碼學的開發人員暫時不須要去研究 OpenSSL 源碼,有這功夫還不如多補補算法、C/C++、編譯原理、數據結構等底層知識,因此本文只會創建 OpenSSL 大概的使用框架以及主流功能,完整的功能及其溯源再也不本文討論範圍。算法
本文將分三類講述 OpenSSL 指令的使用,其中也只講解經常使用的指令:dgst、enc、rsa指令集合、req、x50九、pkcs12。CA 指令由於在平時較少使用,暫不研究。數據庫
OpenSSL 一共實現了4種非對稱加密算法,包括DH算法、RSA算法、DSA算法和橢圓曲線算法(EC)。DH算法通常用戶密鑰交換。RSA 算法既能夠用於密鑰交換,也能夠用於數字簽名,固然,若是你可以忍受其緩慢的速度,那麼也能夠用於數據加密。DSA算法則通常只用於數字簽名, 這裏主要演示 RSA 算法,須要使用DH算法的能夠自行研究 pkey 指令集合。安全
genrsa
指令雖然已經被功能更加全面的genpkey
指令取代,可是由於其相對簡單,功能純粹,能夠做爲學習genpkey
的基礎。另外,genpkey
中的一些更詳細的功能在現階段使用不到,使用genrsa
直接生成私鑰相對簡單方便,容易掌握。其可選參數以下:bash
usage: genrsa [args] [numbits]
-out file output the key to 'file'(輸出的文件名)
-passout arg output file pass phrase source(給輸出的文件設置密碼,此處不一樣於對稱算法加密,對稱算法是對私鑰結果進行加密,這裏是對文件加密)
-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
接兩個參數,第一個選項參數,第二個爲rsa算法中的m值的長度,通常爲1024,更高安全級別的位2048。其中,若是不設置對稱加密的算法,則不會對私鑰結果進行加密,若是不爲空,則會要求輸入對稱算法中將要使用的祕鑰,使用以下:網絡
openssl genrsa -out private.pem 1024
Generating RSA private key, 1024 bit long modulus
..............++++++
...............................++++++
e is 65537 (0x10001)
複製代碼
獲得的結果爲: 數據結構
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
複製代碼
結果: app
rsa功能比較多,能夠對祕鑰進行管理。其中最主要的功能就是從私鑰中提取公鑰、查看祕鑰的結構信息,可使用-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指令查看,此處再也不列出。主要功能演示以下:
openssl rsa -in private.pem -text
複製代碼
結果:
openssl rsa -in private.pem -pubout -out public.pem
複製代碼
// 爲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
複製代碼
// 把pem格式轉化成der格式,使用outform指定der格式
openssl rsa -in RSA.pem -passin pass:123456 -des -passout pass:123456 -outform der -out rsa.der
複製代碼
以上兩個指令時生成和管理祕鑰,而rsautl
指令則和祕鑰的具體使用有關,也就是如何使用 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進制輸出
複製代碼
注意,OpenSSL 中的rsautl
指令和pkeyutl
指令都只能使用私鑰解密,可是公鑰和私鑰都能用於加密。
也就是說使用私鑰加密時須要用私鑰解密,使用公鑰加密後仍然須要使用私鑰解密。猜想可能的緣由是私鑰能夠提取公鑰,因此使用私鑰加密後會先分理處公鑰,再使用公鑰加密?先這麼理解吧,要完全搞清楚估計要學習加密標準及其實現了,指令以下:
openssl rsautl -encrypt -in plain.text -inkey public.pem -out encrypt.text
複製代碼
備註: 爲何相同的明文,使用密鑰加密後,每次密文結果不同?由於 RSA 加密的時候根據填充模式填充隨機數,致使每次加密結果不一樣。
openssl rsautl -decrypt -in encrypt.text -inkey private.pem -out replain.text
複製代碼
openssl rsautl -sign -in plain.text -inkey private.pem -out signed.text
複製代碼
驗籤的時候須要使用-pubin
告知輸入的祕鑰爲公鑰
openssl rsautl -verify -in signed.text -pubin -inkey public.pem -out verify.text
複製代碼
摘要算法經常使用於數字簽名,數字簽名嚴格意義上來說分爲兩步:生成摘要和簽名。首先使用摘要算法對原文計算摘要,而後使用簽名者的私鑰對摘要進行簽名。
openssl中的哈希函數加密主要使用命令dgst
,也能夠直接使用對應算法指令,好比md5
,能夠直接使用-help來查看選項(其實是瞎輸入一個不存在的option來被動彈出提示)。然而,由於openssl
版本的緣由,致使命令亂七八糟,好比md5
指令還能夠指定其餘的算法類型,這就很蛋疼了。
總之就記住一條,只是用dgst指令來加密便可,其使用場景有三個:
計算摘要的格式以下:
openssl dgst [算法名稱] [須要計算摘要的文件]
複製代碼
其中算法可供選擇的有:-md四、-md五、-ripemd160、-sha、-sha一、-sha22四、-sha25六、-sha5十二、-sha38四、-wirlpool等等能夠經過openssl dgst -help命令查看
舉個栗子🌰:
// 進入到對應的文件夾中
cd /Users/caoxk/Demo/opensslTest
// 使用sha1算法對plain.text文件進行摘要計算,其中plain.text中的內容爲123456
openssl dgst -sha1 plain.text
複製代碼
結果:
SHA1(plain.text)= 7c4a8d09ca3762af61e59520943dc26494f8941b
複製代碼
和在線加密的結果對比:
仍然遵循 dgst [指令] [文件名]的格式
// 使用默認md5對plain.text進行哈希,而後使用private.pem私鑰對哈希值進行簽名後以16進制輸出到test.text文件中
openssl dgst -sign private.pem -hex -out test.text plain.text
複製代碼
結果:
openssl dgst -verify public.pem -signature test.text plain.text
複製代碼
結果:
Verified OK
複製代碼
備註 使用hex輸出後驗證會失敗,hex指令只是用於展現,真正使用中須要將hex去掉,同理,rsa中的-hexdump指令也是如此。
OpenSSL一共提供了8種對稱加密算法,且支持電子密碼本模式(ECB)、加密分組連接模式(CBC)、加密反饋模式(CFB)和輸出反饋模式(OFB)四種經常使用的分組密碼加密模式。這裏以AES128的ECB模式作演示。
enc 指令參數以下:
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 加密的結果確定會不一樣。可使用 -S 手動指定鹽的值,可是具體的加鹽算法是什麼,不得而知,請高手指正。
// 使用aes-128算法,以ecb模式,對祕鑰123進行默認加鹽操做後,對plain.text進行對稱加密,結果輸出到 result.text 中
openssl enc -e -aes-128-ecb -in plain.text -p -k 123 -a -out result.text
// 鹽
salt=EF3004BF880585F5
// 加鹽以後的key
key=32BDF1964B275BF4F7A344D066E3A23E
// 加密後的base64結果值
U2FsdGVkX1/vMAS/iAWF9XW23uJDpttgH/3J0n18R30=
複製代碼
解密:
openssl enc -d -aes-128-ecb -in result.text -p -k 123 -a
// 鹽的信息已經包含在了result.text文件中,不須要再次輸入
salt=041C31BA86CA7D29
key=DED2653F37157BC56C7D52919D6FF828
123456
複製代碼
openssl
更新以後有一個pkey
系列的三個指令genpkey
、pkey
、pkeyutl
,和原先的genrsa
、rsa
、rsautl
一一對應。
新的指令集只是在原油基礎上對功能進行了合併和擴展,因此這些指令不做爲本文重點,具體使用能夠在openssl genpkey -help
中查看,這裏只演示最常使用的幾個指令:
genpkey
生成私鑰// 使用隨機數長度爲1024的rsa算法生成pem格式的私鑰並輸出到rsa_pri.key文件中,且在文件中打印私鑰/公鑰參數/結構的文本
openssl genpkey -out rsa_pri.key -outform PEM -algorithm RSA -pkeyopt rsa_keygen_bits:1024 -text
複製代碼
結果:
pkey
從私鑰中提取公鑰pkey命令處理公鑰或私鑰。它們能夠在各類形式之間進行轉換,並將其結構打印出來。其指令以下:
-in file 輸入文件,若是沒有則標準輸入
-inform X 輸入的格式
-passin arg 輸入文件的密碼
-outform X 輸出格式(DER/PEM)
-out file 輸出的文件,若是沒有則標準輸出
-passout arg 輸出文件加密所使用的密碼
-pubin 默認是讀入私鑰,該選項指定讀入公鑰
-pubout 默認狀況下會輸出私鑰,使用此選項將會
輸出公鑰,用於從私鑰生成公鑰
-text 打印公私鑰結構信息
複製代碼
從私鑰中提取公鑰:
openssl pkey -in private.pem -pubout -out public.pem
複製代碼
結果:
// 公鑰加密
openssl pkeyutl -encrypt -in plain.text -inkey public.pem -out encrypt.text
// 私鑰解密
openssl pkeyutl -decrypt -in encrypt.text -inkey private.pem -out decrypt.text
複製代碼
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
複製代碼
證書的格式相關的密碼學標準是PKCS#10,標準中規定了CSR 文件的格式,req
指令就是基於該標準,實現了 CSR 文件的生成、查看、驗證、自簽名等功能。
req
的使用方法爲:req [options] <infile >outfile
,其選項有:
[new/x509]
當使用-new選取的時候,說明是要生成證書請求,當使用x509選項的時候,說明是要生成自簽名證書。
[/key/newkey/keyout]
key和newkey是互斥的,key是指定已有的密鑰文件,而newkey是指在生成證書請求或者自簽名證書的時候自動生成密鑰,而後生成的密鑰名稱有keyout參數指定。
當指定newkey選項時,後面指定rsa:bits說明產生rsa密鑰,位數由bits指定。指定dsa:file說明產生dsa密鑰,file是指生成dsa密鑰的參數文件(由dsaparam生成)
[in/out/inform/outform/keyform]
in選項指定證書請求文件,當查看證書請求內容或者生成自簽名證書的時候使用
out選項指定證書請求或者自簽名證書文件名,或者公鑰文件名(當使用pubkey選項時用到),以及其餘一些輸出信息。
inform、outform、keyform分別指定了in、out、key選項指定的文件格式,默認是PEM格式。
[pubkey/noout/text/默認]
text打印請求文件中的全部信息(不包含公鑰),pubkey提取出 csr 文件中的公鑰,noout不輸出 csr 文件中的 request 內容。默認只打印 request 內容。
除上述主要參數外,還有許多其餘的參數,不在一一敘述,有興趣的讀者能夠查看req的man手冊
複製代碼
使用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
複製代碼
默認只會輸出 csr 內容,-text
輸出包含 csr 內容的全部結構,-noout
不輸出 csr內容
openssl req -in request.csr -noout -text
複製代碼
結果:
openssl req -in request.csr -pubkey
複製代碼
結果:
-x509
須要三個參數:證書請求文件 csr 、證書籤名用到的私鑰、證書輸出文件
// 使用private.pem 私鑰對request.csr的證書請求文件進行簽名並輸出
openssl req -x509 -in request.csr -out client.cer -key private.pem
複製代碼
結果:
查看證書內容則在下一個指令x509
中講解。
OpenSSL實現了對證書的X.509標準編解碼、PKCS#12格式的編解碼以及PKCS#7的編解碼功能。並提供了一種文本數據庫,支持證書的管理功能,包括證書密鑰產生、請求產生、證書籤發、吊銷和驗證等功能。
事實上,OpenSSL提供的CA應用程序就是一個小型的證書管理中心(CA),實現了證書籤發的整個流程和證書管理的大部分機制。
該指令功能豐富,能夠查看證書信息、做爲一個僞 CA 機構給證書籤名(和req -x509指令同樣)、證書格式轉換等。由於功能是在太多,這裏只介紹最主要和經常使用的功能:
// 查看證書格式爲DER的Apple.cer文件中的信息,默認證書爲PEM格式
openssl x509 -in Apple.cer -text -inform DER
複製代碼
結果:
// 只打印證書中的公鑰,不打印證書
openssl x509 -in ios_development.cer -inform DER -pubkey -noout
複製代碼
openssl x509 -in apple.cer -inform DER -out cert.pem -outform PEM
複製代碼
和req -x509
是相同的,這裏再也不贅述。
PKCS#標準有1-15個,具體的內容能夠去網絡上查閱,後文也會對密碼學的一些主流標準進行簡析。OpenSSL 就是參照這些標準實現了一些使用的功能。
PKCS#12標準定義了我的身份信息(包括私鑰、證書、各類祕密和擴展字段)的格式。p12 文件則是我的祕鑰文件,能夠只包含私鑰,也能夠包含證書和私鑰。通常用於用戶在不一樣設備間移動他們的我的身份信息。
在iOS中,開發者經過本身的私鑰生成 csr 文件以後在 apple 官網生成並下載了證書,這個證書只有本身能使用,其餘人由於沒有證書對應的私鑰,因此是不能使用的。因而乎就有了把p12文件共享給別人,其餘人在本身電腦上安裝私鑰以後就可使用對應的證書對代碼進行簽名了。可是貌似新的版本上已經不須要共享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
// 要求輸入加密導出的PEM文件的密碼
Enter PEM pass phrase:
caoxkdeMacBook-Pro:opensslTest caoxk$
複製代碼
結果:
輸入-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$
複製代碼
結果:
openssl pkcs12 -export -in alicecert.pem -inkey alicekey.pem -certfile cacert.pem -out alice.p12
複製代碼
以前的指令中通常使用-text
來進行信息的查看,在pkcs12
指令中,使用-info
來查看 p12 文件的內容,須要注意的是,仍然記得帶上-nodes
,不然私鑰會被加密,不予展現。
查看建立 csr 文件時,從私鑰中導出的p12文件:
openssl pkcs12 -in caoxk1107-private.p12 -nodes -info
複製代碼
結果:
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-----
複製代碼
查看經由鑰匙串中的證書導出的p12文件
openssl pkcs12 -in privateKeyFromKeychain.p12 -info -nodes
複製代碼
結果:
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-----
複製代碼
備註 從結果中能夠清晰的看出,經由鑰匙串中已經安裝成功的證書(有何證書中配套的私鑰才能安裝成功),導出以後的 p12 文件中包含證書+私鑰。而生成 CSR 文件時的私鑰中導出的 p12 文件只包含私鑰。
CA指令至關於OpenSSL在內部實現了一個小型的CA系統,簽發證書請求和生成CRL,維護一個已簽發證書狀態的文本數據庫,由於實際使用中較少,本文不討論該指令的使用。
至此,OpenSSL 主要的功能介紹完畢,其中若有錯誤,強烈歡迎指正!另外,man comman
到底怎麼使用?No manual entry for rsa
怎麼解決?若是有高手知道,也請告知,萬分感謝!
後文會對一些名詞作出解釋和總結,還會結合iOS中證書的申請、HTTPS的使用、iOS簽名機制作出實踐。