前言
最近要做iOS SDK
的联网授权,涉及到数据安全验证,因此想到使用RSA
进行签名和验证。 授权主要流程如下:
- 1、客户方前往我方开放平台注册授权,得到
AppId
和AppSecret
。 - 2、客户方集成
SDK
,调用Register
接口传入AppId
和AppSecret
。 - 3、
SDK
将AppId
和客户端平台相关信息提交给服务器后台。 - 4、服务器下发最新服务器时间戳、
sign
、公钥、授权相关数据给客户端。 - 5、客户端使用公钥进行签名验证。
- 6、签名验证通过计算授权时间是否有效。
简单介绍就是服务器端生成秘钥对,使用私钥对客户端和开放平台提交的参数进行签名,然后下发签名和公钥(经过处理的字符串)到客户端,客户端验签通过后进行授权验证。
OpenSSL
使用RSA
需要调用一个很重要的库OpenSSL
,可以使用Cocoapods
在项目中快速集成:
我一般会安装如下版本:
pod 'OpenSSL-Universal', '~> 1.0.2.20'
使用前先导入相关头文件:
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/evp.h>
#include <openssl/err.h>
#include <openssl/bio.h>
公钥与私钥
1、PEM公钥和私钥文件生成
为了验证接口的正确性,我们需要先本地生成秘钥对进行本地代码测试:
1.1、在桌面创建文件夹 RSA Key
,终端CD
到此文件夹。
myz@myz mediapipe % cd /Users/myz/Desktop/RSA\ Key
1.2、终端生成1024位私钥
openssl genrsa -out rsa_private_key.pem 1024
myz@myz RSA Key % openssl genrsa -out rsa_private_key.pem 1024
Generating RSA private key, 1024 bit long modulus
........++++++
.................................++++++
e is 65537 (0x10001)
myz@myz RSA Key %
1.3、使用RSA
私钥生成公钥
openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout
2、通用RSA
秘钥格式
将pem
文件改为txt
后缀打开可以看到秘钥文本
2.1、公钥
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjQRu0fImY/AVasfAneO4G8sID
P3L9XDX+nZq8GBw4vlDzoWIqXGx8ETRMMRx+fdEz3Skdrlsp1+6NcYNSp0Id4b1x
mRw4A5zokwN/C6vcVpLZM86Kc/q+Pi9kWkDRUm32jUmI2qWtqyXIOGZMUIfoSVe/
9czeJ66JFX4