知識點(diǎn):
RSA加密主要涉及 ?服務(wù)端 (Java,PHP) ,?客戶端 (安卓,iOS)
Java,Android用到的的公鑰、私鑰格式相同,私鑰需要PKCS8格式,默認(rèn)生成是PKCS1格式
PHP私鑰需要PKCS1格式的 (默認(rèn)生成即可)
iOS私鑰需要.p12的文件格式,公鑰需要.der格式的
密鑰作用
公鑰 : 用于加密
私鑰 : 用于解密
Mac終端生成步驟
openssl:是一個(gè)強(qiáng)大的安全套接字層密碼庫,Apache使用它加密HTTPS,OpenSSH使用它加密SSH,但是,你不應(yīng)該只將其作為一個(gè)庫來使用,它還是一個(gè)多用途的、跨平臺的密碼工具,一個(gè)自由的軟件組織,專注做加密和解密的框架。
? 生成私鑰 (PHP)
openssl genrsa -out rsa_private_key.pem 2048
該命令生成一個(gè)模長2048位,名字為rsa_private_key.pem、PKCS1格式的RSA私鑰文件.
genrsa:指定生成算法使用RSA
-out:后面參數(shù)是生成的私鑰的文件名
2048:生成私鑰的模長,單位字節(jié)(bits)
? 生成公鑰 (PHP,Java,Android)
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
根據(jù)生成的私鑰rsa_private_key.pem文件,生成公鑰rsa_public_key.pem文件
? 生成Java和Android的私鑰(iOS可以跳過)
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out rsa_pkcs8_private_key.pem
生成名字為rsa_pkcs8_private_key.pem的私鑰文件
Java 和 Android用到的密鑰:
公鑰:rsa_public_key.pem
私鑰:rsa_pkcs8_private_key.pem
? 創(chuàng)建證書請求文件 (iOS)
openssl req -new -key rsa_private_key.pem -out rsacert.csr
終端會提示輸入國家、省市、所在地、組織、組織單位、常用名稱、郵箱地址等信息,按要求填寫(可以隨便填寫),輸入完對應(yīng)信息后會提示輸入一個(gè)密碼:

最終會生成rsacert.csr 文件

? 生成數(shù)字證書rsacert.crt,簽名,有效期10年
openssl x509 -req -days 3650 -in rsacert.csr -signkey rsa_private_key.pem -out rsacert.crt
用最開始生成的私鑰rsa_private_key.pem和rsacert.csr證書請求文件生成一個(gè)數(shù)字證書rsacert.crt
? 生成iOS使用的公鑰文件public_key.der
openssl x509 -outform der -in rsacert.crt -out public_key.der
使用x509工具自建CA。由于x509無法建立證書請求文件,所以只能使用openssl req來生成請求文件,然后使用x509來自簽署, 也可以用來簽署他人的證書請求,即為他人頒發(fā)證書。
? 生成iOS使用的私鑰文件private_key.p12
openssl pkcs12 -export -out private_key.p12 -inkey rsa_private_key.pem -in rsacert.crt
知識點(diǎn):
終端會提示設(shè)置密碼,該密碼是.p12私鑰的密碼(用private_key.p12私鑰解密時(shí), 要用到該密碼,需要記錄下), 會提示再次輸入檢驗(yàn)剛才輸入的密碼.