证书生成

​ 如果你在网上找不到一个能用的办法解决IOS RSA加密,那就对了,我找过,很多都不能用。这里做一个总结,方便以后使用。

​ 现在流行2048的证书,但是服务器如果要把私钥存成字段会发现位数太长。所以1024也能用。

知识点

RSA加密主要涉及 ❶服务端 (Java,PHP) ,❷客户端 (安卓,iOS)
Java,Android用到的的公钥私钥格式相同,私钥需要PKCS8格式,默认生成是PKCS1格式
PHP私钥需要PKCS1格式的 (默认生成即可)
iOS私钥需要.p12的文件格式,公钥需要.der格式的

密钥作用

    **公钥** : 用于加密
    **私钥** : 用于解密

Mac终端生成步骤

openssl:是一个强大的安全套接字层密码库,Apache使用它加密HTTPS,OpenSSH使用它加密SSH,但是,你不应该只将其作为一个库来使用,它还是一个多用途的、跨平台的密码工具,一个自由的软件组织,专注做加密和解密的框架。

生成私钥 (PHP)

1
openssl genrsa -out rsa_private_key.pem 1024 #这里可以生成2048

​ 该命令生成一个模长2048位,名字为rsa_private_key.pemPKCS1格式的RSA私钥文件.

genrsa:指定生成算法使用RSA
-out:后面参数是生成的私钥的文件名
2048:生成私钥的模长,单位字节(bits)

生成公钥 (PHP,Java,Android)

1
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

生成JavaAndroid的私钥(iOS可以跳过)

1
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out rsa_pkcs8_private_key.pem

生成名字为rsa_pkcs8_private_key.pem的私钥文件
JavaAndroid用到的密钥:
公钥:rsa_public_key.pem
私钥:rsa_pkcs8_private_key.pem

创建证书请求文件 (iOS)

终端会提示输入国家、省市、所在地、组织、组织单位、常用名称、邮箱地址等信息,按要求填写(可以随便填写),输入完对应信息后会提示输入一个密码:

tupian

最终会生成rsacert.csr 文件

tupian

生成数字证书rsacert.crt,签名,有效期10年

1
openssl x509 -req -days 3650 -in rsacert.csr -signkey rsa_private_key.pem -out rsacert.crt

​ 用最开始生成的私钥rsa_private_key.pemrsacert.csr证书请求文件生成一个数字证书rsacert.crt

生成iOS使用的公钥文件public_key.der

1
openssl x509 -outform der -in rsacert.crt -out public_key.der

​ 使用x509工具自建CA。由于x509无法建立证书请求文件,所以只能使用openssl req来生成请求文件,然后使用x509来自签署, 也可以用来签署他人的证书请求,即为他人颁发证书。

生成iOS使用的私钥文件private_key.p12

1
openssl pkcs12 -export -out private_key.p12 -inkey rsa_private_key.pem -in rsacert.crt

知识点\:
终端会提示设置密码,该密码是.p12私钥的密码(用private_key.p12私钥解密时, 要用到该密码,需要记录下), 会提示再次输入检验刚才输入的密码.