先简单介绍一下RSA。
1.加密、解密:使用公钥对数据进行加密,通过私钥对加密后的数据解密。
2.加签、解签:使用私钥对数据进行签名,通过加签名的数据和公钥进行数据验证,以确认合法性。
网上RSA相关的代码、文章有很多,这篇文章主要是提醒iOS开发者,注意pkcs8是用于java的,如果后端只给了你私钥,你要先判断一下这个私钥匙是不是iOS支持的pkcs1。
后端给了我一个.pem 文件,我按照网上的方法,通过终端使用openssl命令生成.csr文件,在这一步报错了,原因是这个.pem 文件密钥格式是pkcs8。可以通过用文本编辑器打开这个.pem格式的文件,判断一下密钥的长度。在线计算字符串长度<< 点这里(注意删除空格)。如果是按1024取模(通常都是1024),pkcs1格式的私钥长度应该是824(包含回车)。如果是pkcs8的格式的密钥长度为861。如果你的密钥长度不是824,就说明它不是iOS支持的按1024取模的pkcs1格式,你需要转换格式。
终端命令如下。
openssl pkcs8 -in pkcs8_private_key.pem -nocrypt -out pkcs1_private_key.pem
转换后你可以检查一下,这个pkcs1文件的密钥长度是不是824。
接下来就可以通过openssl生成 .csr -> .ctr -> .p12 ,这个步骤后边会有,从别人那边复制过来的。加签的代码我就不贴了,git上一大把,这篇文章主要是提醒iOS开发者,注意pkcs8与pkcs1的转换。
转换流程我走了一遍,可以看这里 >> pkcs8与pkcs1格式互转。
openssl RSA 常用命令
一、使用openssl生成所需秘钥文件
生成环境是在mac系统下,使用openssl进行生成,首先打开终端,按下面这些步骤依次来做:
- 生成模长为1024bit的私钥文件private_key.pem
openssl genrsa -out private_key.pem 1024
- 生成证书请求文件rsaCertReq.csr
openssl req -new -key private_key.pem -out rsaCerReq.csr
注意:这一步会提示输入国家、省份、mail等信息,可以根据实际情况填写,或者全部不用填写,直接全部敲回车.
- 生成证书rsaCert.crt,并设置有效时间为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