自定义 RSA 密钥

对 RSA 密钥的作用详见安全问题

目前为了更高的安全性,平台强制要求所有补丁下发都使用自定义 RSA 密钥,请按以下步骤生成和接入:

1.生成 RSA 密钥

在 Mac 终端上执行 openssl,再执行以下三句命令,生成 PKCS8 格式的 RSA 公私钥,执行过程中提示输入密码,密码为空(直接回车)就行。

openssl >
genrsa -out rsa_private_key.pem 1024
pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM –nocrypt
rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

这样在执行的目录下就有了 rsa_private_key.pemrsa_public_key.pem 这两个文件。这里生成了长度为 1024 的私钥,长度可选 1024 / 2048 / 3072 / 4096 ...。

2. 生成配置代码并接入

接下来要生成公钥配置代码,接入 SDK 时使用。

可以通过 RSA配置自动生成 工具生成配置代码,打开 rsa_public_key.pem,复制内容到框里点击 生成配置代码 就可以了。

也可以手动生成,把 rsa_public_key.pem 的内容换行手动改成 \n,并放入 [JSPatch setupRSAPublicKey:@""] 里:

//rsa_public_key.pem
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSGge71bOb+nlTwUgiHMJN8Aki
TOy+mBULlVi70jKkO20+PNUp1zlkzAPHkgqHeWH8jLGYVUPbhpcrTVad9eHhouik
BDRvRNCgdS75wDimBQYUJj8fOneqE2d7oc5ODp1B8NS0O+TZK2kO+tm1gw8+/9xP
sw4C7/YZka+gbilFeQIDAQAB
-----END PUBLIC KEY-----
[JSPatch setupRSAPublicKey:@"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSGge71bOb+nlTwUgiHMJN8Aki\nTOy+mBULlVi70jKkO20+PNUp1zlkzAPHkgqHeWH8jLGYVUPbhpcrTVad9eHhouik\nBDRvRNCgdS75wDimBQYUJj8fOneqE2d7oc5ODp1B8NS0O+TZK2kO+tm1gw8+/9xP\nsw4C7/YZka+gbilFeQIDAQAB\n-----END PUBLIC KEY-----"]

最后在接入 SDK 处调用:

#import <JSPatchPlatform/JSPatch.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [JSPatch startWithAppKey:@"你的AppKey"];
    [JSPatch setupRSAPublicKey:@"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSGge71bOb+nlTwUgiHMJN8Aki\nTOy+mBULlVi70jKkO20+PNUp1zlkzAPHkgqHeWH8jLGYVUPbhpcrTVad9eHhouik\nBDRvRNCgdS75wDimBQYUJj8fOneqE2d7oc5ODp1B8NS0O+TZK2kO+tm1gw8+/9xP\nsw4C7/YZka+gbilFeQIDAQAB\n-----END PUBLIC KEY-----"];
    [JSPatch sync];
    ...
}
@end

注意应该在 +sync 之前调用,因为 +sync 可能会下载到脚本,这时已经要用 RSA key 去验证了。

3.使用私钥下发补丁

下发脚本时,选择本地的 rsa_private_key.pem 文件,与脚本一同上传,JSPatch 平台会使用这个上传的 Private Key 对脚本 MD5 值进行加密,再下发给客户端。若客户端经过上述第二步设置了对应的 Public Key,就会用设置的 Public Key 对脚本进行验证,验证通过后运行脚本,否则不会运行。

这里上传的 rsa_private_key.pem 只是一次性使用,不会保存在服务端,所以只有通过用户自己保存的 rsa_private_key.pem 文件才可以针对 APP 下发脚本,即使 JSPatch 平台或者七牛云被黑,第三方也无法对你的 APP 下发恶意脚本(可以下发,但验证不过,不会执行),保证安全性。rsa_private_key.pem 请妥善保管,避免泄露。

若担心此处私钥在网络传输中暴露,可以使用 JSPatch 补丁打包加密工具,在本地进行加密打包,无需上传私钥即可下发脚本。

JSPatch 平台公告
JSPatch.com © 2017 Github开源 | 联系我们 | 合作伙伴