說(shuō)明:
Java和PHP為服務(wù)端,Android和iOS為客戶端翔怎。
Java和Android所用的公鑰窃诉、私鑰是同樣的格式,私鑰需要PKCS8格式赤套,默認(rèn)生成的私鑰是PKCS1格式的
php私鑰需要PKCS1格式的
iOS私鑰需要.p12的文件格式飘痛,公鑰需要.der格式的
公鑰作用:RSA加密 、驗(yàn)簽
私鑰作用:RSA解密容握、加簽
以下為終端操作命令的詳細(xì)步驟:
一宣脉、生成私鑰文件
openssl genrsa -out rsa_private_key.pem 2048
openssl:是一個(gè)自由的軟件組織,專注做加密和解密的框架。
genrsa:指定了生成了算法使用RSA
-out:后面的參數(shù)表示生成的私鑰key的文件名字
2048:表示的是生成key的長(zhǎng)度,單位字節(jié)(bits)
此命令后會(huì)生成一個(gè)名字為rsa_private_key.pem剔氏、2048位塑猖、PKCS1格式的RSA私鑰
二竹祷、生成公鑰文件
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
此命令會(huì)從私鑰中提取出來(lái)生成一個(gè)名字為rsa_public_key.pem的RSA公鑰
PHP
所需公鑰、私鑰已經(jīng)生成羊苟,即rsa_public_key.pem塑陵、rsa_private_key.pem
Java和Android
需要把私鑰的格式從默認(rèn)的PKCS1轉(zhuǎn)換為PKCS8格式
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out pkcs8_private_key.pem
此命令會(huì)會(huì)生成名字為pkcs8_private_key.pem的RSA私鑰文件
Java和Android所需公鑰、私鑰已經(jīng)生成蜡励,即rsa_public_key.pem令花、pkcs8_private_key.pem
可以到在線RSA驗(yàn)證網(wǎng)站上,驗(yàn)證公鑰私鑰是否成對(duì)凉倚。在線RAS生成彭则、轉(zhuǎn)換工具
iOS
由rsa_private_key.pem生成csr -> 生成crt -> 生成der -> 生成p12
1、 創(chuàng)建證書請(qǐng)求
openssl req -new -key rsa_private_key.pem -out rsacert.csr
拿著RSA私鑰文件去數(shù)字證書頒發(fā)機(jī)構(gòu)(即CA)申請(qǐng)一個(gè)數(shù)字證書占遥。CA會(huì)給你一個(gè)新的文件cacert.pem,那才是你的數(shù)字證書。
輸入命令后會(huì)提示讓輸入國(guó)家输瓜、省份瓦胎、地區(qū)、郵箱等信息尤揣,按要求填寫或者不填都可以搔啊,最終會(huì)生成rsacert.csr 文件
2、生成證書并簽名北戏,設(shè)置有效期10年
openssl x509 -req -days 3650 -in rsacert.csr -signkey rsa_private_key.pem -out rsacert.crt
509是一種非常通用的證書格式
將用上面生成的密鑰rsa_private_key.pem和rsacert.csr證書請(qǐng)求文件生成一個(gè)數(shù)字證書rsacert.crt,這個(gè)就是公鑰
3负芋、轉(zhuǎn)換格式:將pem格式文件轉(zhuǎn)換成der格式 (公鑰)
openssl x509 -outform der -in rsacert.crt -out public_key.der
在iOS開發(fā)中,公鑰是不能使用base64編碼的,上面的命令是將公鑰的base64編碼字符串轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)
此時(shí)生成的public_key.der就是iOS所需的RSA公鑰
4、 導(dǎo)出 P12 文件
openssl pkcs12 -export -out private_key.p12 -inkey rsa_private_key.pem -in rsacert.crt
在iOS使用私鑰不能直接使用嗜愈,需要導(dǎo)出一個(gè)p12文件旧蛾。此命令就是將私鑰文件導(dǎo)出為p12文件
此時(shí)會(huì)提示讓輸入密碼,可輸入iOS私鑰文件的密碼蠕嫁,但是請(qǐng)注意:在項(xiàng)目中讀取私鑰文件時(shí)需要此時(shí)設(shè)置的密碼锨天。并且此密碼是生成的p12私鑰文件的密碼,并不是rsa_private_key.pem原始私鑰文件的密碼
至此剃毒,iOS所需公鑰病袄、私鑰生成完成,分別是public_key.der赘阀、private_key.p12