說明:
Java和PHP為服務端,Android和iOS為客戶端。
Java和Android所用的公鑰、私鑰是同樣的格式,私鑰需要PKCS8格式,默認生成的私鑰是PKCS1格式的
php私鑰需要PKCS1格式的
iOS私鑰需要.p12的文件格式,公鑰需要.der格式的
公鑰作用:RSA加密 、驗簽
私鑰作用:RSA解密、加簽
以下為終端操作命令的詳細步驟:
一、生成私鑰文件
openssl genrsa -out rsa_private_key.pem 2048
openssl:是一個自由的軟件組織,專注做加密和解密的框架。
genrsa:指定了生成了算法使用RSA
-out:后面的參數表示生成的私鑰key的文件名字
2048:表示的是生成key的長度,單位字節(jié)(bits)
此命令后會生成一個名字為rsa_private_key.pem、2048位、PKCS1格式的RSA私鑰
二、生成公鑰文件
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
此命令會從私鑰中提取出來生成一個名字為rsa_public_key.pem的RSA公鑰
PHP
所需公鑰、私鑰已經生成,即rsa_public_key.pem、rsa_private_key.pem
Java和Android
需要把私鑰的格式從默認的PKCS1轉換為PKCS8格式
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out pkcs8_private_key.pem
此命令會會生成名字為pkcs8_private_key.pem的RSA私鑰文件
Java和Android所需公鑰、私鑰已經生成,即rsa_public_key.pem、pkcs8_private_key.pem
可以到在線RSA驗證網站上,驗證公鑰私鑰是否成對。在線RAS生成、轉換工具
iOS
由rsa_private_key.pem生成csr -> 生成crt -> 生成der -> 生成p12
1、 創(chuàng)建證書請求
openssl req -new -key rsa_private_key.pem -out rsacert.csr
拿著RSA私鑰文件去數字證書頒發(fā)機構(即CA)申請一個數字證書。CA會給你一個新的文件cacert.pem,那才是你的數字證書。
輸入命令后會提示讓輸入國家、省份、地區(qū)、郵箱等信息,按要求填寫或者不填都可以,最終會生成rsacert.csr 文件
2、生成證書并簽名,設置有效期10年
openssl x509 -req -days 3650 -in rsacert.csr -signkey rsa_private_key.pem -out rsacert.crt
509是一種非常通用的證書格式
將用上面生成的密鑰rsa_private_key.pem和rsacert.csr證書請求文件生成一個數字證書rsacert.crt,這個就是公鑰
3、轉換格式:將pem格式文件轉換成der格式 (公鑰)
openssl x509 -outform der -in rsacert.crt -out public_key.der
在iOS開發(fā)中,公鑰是不能使用base64編碼的,上面的命令是將公鑰的base64編碼字符串轉換成二進制數據
此時生成的public_key.der就是iOS所需的RSA公鑰
4、 導出 P12 文件
openssl pkcs12 -export -out private_key.p12 -inkey rsa_private_key.pem -in rsacert.crt
在iOS使用私鑰不能直接使用,需要導出一個p12文件。此命令就是將私鑰文件導出為p12文件
此時會提示讓輸入密碼,可輸入iOS私鑰文件的密碼,但是請注意:在項目中讀取私鑰文件時需要此時設置的密碼。并且此密碼是生成的p12私鑰文件的密碼,并不是rsa_private_key.pem原始私鑰文件的密碼
至此,iOS所需公鑰、私鑰生成完成,分別是public_key.der、private_key.p12