先簡(jiǎn)單介紹一下RSA。
1.加密括堤、解密:使用公鑰對(duì)數(shù)據(jù)進(jìn)行加密,通過(guò)私鑰對(duì)加密后的數(shù)據(jù)解密讥电。
2.加簽轧抗、解簽:使用私鑰對(duì)數(shù)據(jù)進(jìn)行簽名,通過(guò)加簽名的數(shù)據(jù)和公鑰進(jìn)行數(shù)據(jù)驗(yàn)證鸦致,以確認(rèn)合法性。
網(wǎng)上RSA相關(guān)的代碼分唾、文章有很多,這篇文章主要是提醒iOS開(kāi)發(fā)者弧蝇,注意pkcs8是用于java的折砸,如果后端只給了你私鑰,你要先判斷一下這個(gè)私鑰匙是不是iOS支持的pkcs1睦授。
后端給了我一個(gè).pem 文件,我按照網(wǎng)上的方法去枷,通過(guò)終端使用openssl命令生成.csr文件,在這一步報(bào)錯(cuò)了竖螃,原因是這個(gè).pem 文件密鑰格式是pkcs8逗余。可以通過(guò)用文本編輯器打開(kāi)這個(gè).pem格式的文件录粱,判斷一下密鑰的長(zhǎng)度。在線計(jì)算字符串長(zhǎng)度<< 點(diǎn)這里(注意刪除空格)啥繁。如果是按1024取模(通常都是1024),pkcs1格式的私鑰長(zhǎng)度應(yīng)該是824(包含回車(chē))些楣。如果是pkcs8的格式的密鑰長(zhǎng)度為861宪睹。如果你的密鑰長(zhǎng)度不是824,就說(shuō)明它不是iOS支持的按1024取模的pkcs1格式亭病,你需要轉(zhuǎn)換格式。
終端命令如下罪帖。
openssl pkcs8 -in pkcs8_private_key.pem -nocrypt -out pkcs1_private_key.pem
轉(zhuǎn)換后你可以檢查一下邮屁,這個(gè)pkcs1文件的密鑰長(zhǎng)度是不是824菠齿。
接下來(lái)就可以通過(guò)openssl生成 .csr -> .ctr -> .p12 ,這個(gè)步驟后邊會(huì)有芋忿,從別人那邊復(fù)制過(guò)來(lái)的疾棵。加簽的代碼我就不貼了,git上一大把是尔,這篇文章主要是提醒iOS開(kāi)發(fā)者,注意pkcs8與pkcs1的轉(zhuǎn)換拟枚。
轉(zhuǎn)換流程我走了一遍,可以看這里 >> pkcs8與pkcs1格式互轉(zhuǎn)痕囱。
openssl RSA 常用命令
一暴匠、使用openssl生成所需秘鑰文件
生成環(huán)境是在mac系統(tǒng)下,使用openssl進(jìn)行生成每窖,首先打開(kāi)終端,按下面這些步驟依次來(lái)做:
- 生成模長(zhǎng)為1024bit的私鑰文件private_key.pem
openssl genrsa -out private_key.pem 1024
- 生成證書(shū)請(qǐng)求文件rsaCertReq.csr
openssl req -new -key private_key.pem -out rsaCerReq.csr
注意:這一步會(huì)提示輸入國(guó)家蟆炊、省份瀑志、mail等信息涩搓,可以根據(jù)實(shí)際情況填寫(xiě)劈猪,或者全部不用填寫(xiě),直接全部敲回車(chē).
- 生成證書(shū)rsaCert.crt充边,并設(shè)置有效時(shí)間為10年
openssl x509 -req -days 3650 -in rsaCerReq.csr -signkey private_key.pem -out rsaCert.crt
- 生成供iOS使用的公鑰文件public_key.der
openssl x509 -outform der -in rsaCert.crt -out public_key.der
- 生成供iOS使用的私鑰文件private_key.p12
openssl pkcs12 -export -out private_key.p12 -inkey private_key.pem -in rsaCert.crt