您的位置:首页 > 其它

云通信-腾讯云,TLS独立模式公私钥生成

2016-03-28 20:10 393 查看
云通信-腾讯云,TLS独立模式公私钥生成

概述

TLS后台API我们提供了6个包供开发者下载,内容分别是windows下64位预编译文件包、windows下32位预编译文件包、linux下64位预编译文件包、linux下32位预编译文件包、zip格式的源代码文件和tar.gz格式的源代码文件。

linux平台

工具使用

工具的主要作用是在本地手动生成公私钥,手动生成sig和验证sig。

进入预编译文件包的tools目录,可以看到下面的几个文件,

├── genkey.sh 生成公私钥的批处理文件

├── openssl.cnf openssl配置文件,默认不要修改

├── openssl openssl工具可执行文件文件

└── tls_licence_tools 生成sig和校验sig的工具

生成公私钥

进入tools目录,执行下面的命令,

./genkey.sh

输出

read EC key

writing EC key

表示生成公私钥成功,公私钥分别为当前目录下的 public.pem 和 ec_key.pem。下面是演示的截图,

生成sig和校验sig

首先不带参数执行 tls_licence_tools,即执行下面的命令

./tls_licence_tools

输出

current version: 1.7

Usage:

get sig: ./tls_licence_tools 1 pri_key_file sig_file expire sdkappid acctype appid3rd identifier

get sig e.g.: ./tls_licence_tools 1 ec_key.pem sig 3600 1104620500 107 1104620500 group_root

verify sig: ./tls_licence_tools 2 pub_key_file sig_file sdkappid acctype appid3rd identifier

verify sig e.g.: ./tls_licence_tools 2 public.pem sig 1104620500 107 1104620500 group_root

下面是演示截图,

输出实际上是参数模板和示例。

执行类似于下面的命令可以生成 sig,

./tls_licence_tools 1 ec_key.pem sig 3600 1104620500 107 1104620500 group_root

执行类似于下面的命令可以校验 sig,

./tls_licence_tools 2 public.pem sig 1104620500 107 1104620500 group_root

下面演示截图,

下面解释下参数模板中参数的意义,

pri_key_file:私钥文件的路径

pub_key_file:公钥文件的路径

sig_file:sig 文件的路径,如果是生成 sig,那么会将 sig 写入这个文件,如果是校验 sig,那么会从这个文件读取 sig 的内容

expire:sig 的有效期

sdkappid:创建应用时页面上分配的 sdkappid

acctype:账号集成管理页面上配置之后显示的 accounttype

appid3rd:独立模式下与 sdkappid 一样,集成模式下第三方开放平台账号的 appid

identifier:用户标识,即用户 id

C++接口

首先包含include/tls_sig_api目录下的tls_signature.h。头文件中包含的接口,tls_gen_signature_ex和tls_check_signature_ex,前者是生成sig的接口,后者是校验sig的接口,详细的参数和返回值说明请参考头文件tls_signature.h。

然后是链接静态库,在lib目录下有下列目录,

├── jni

├── jsoncpp

├── openssl

└── tls_sig_api

需要链接的静态库是libjsoncpp.a、openssl目录下的libcrypto.a和libtlsignature.a。另外还需要链接系统的-ldl和-lz,典型的编译配置如下,

假设我们的代码的目录结构如下,

demo目录结构

|—include

|—lib

|—src

Makefile和demo.cpp源文件在 src 中,典型的工程配置如下

CFLAGS= -I../include/tls_sig_api -Wall -fPIC

LIBS= ../lib/jsoncpp/libjsoncpp.a ../lib/openssl/libcrypto.a -ldl -lz

g++ -o demo demo.cpp (CFLAGS)(CFLAGS) (LIBS)

下面的截图是我们开发时编译tls_licence_tools的命令行,由于是我们这边的开发环境,链接库的路径可以按照开发者自己的实际情况给出,

【特别注意】

如果程序有多线程调用TLS后台API的用法,请在程序初始化时和结束时分别调用下面的接口,

int multi_thread_setup(void);

void multi_thread_cleanup(void);

Java接口

目前java接口使用jni的方式实现。Java目录下tls_sigcheck.class,是由tls_sigcheck.java编译得到,如果有jdk兼容性问题,开发者可自行重新编译此文件,编译命令为,

javac -encoding utf-8 tls_sigcheck.java

请注意接口的包路径为com.tls.sigcheck,典型的使用方法是example目录下java版本demo的组织方式,

├── com

│ └── tls

│ └── sigcheck

│ └── tls_sigcheck.class

├── Demo.class

├── Demo.java

├── ec_key.pem

├── public.pem

└── README

之前提到java接口目前使用的jni的方式,所以Demo.java调用了载入so的语句,

demo.loadJniLib(“/home/jnisigcheck.so”);

开发者根据自己的存放jnisigcheck.so实际路径进行修改,预编译的jnisigcheck.so存放在lib/jni目录下。

demo的使用方式请参考example/java/README。下面是演示截图,

Java原生接口

1. 依赖的jar文件:

Java原生接口都封装在5个jar包中。在tls_sig_api/java_native/jar目录下:

├── bcpkix-jdk15on-152.jar

├── bcprov-jdk15on-152.jar

├── commons-codec-1.10.jar

├── Demo.java

├── gson-2.3.1.jar

├── json.jar

├── tls_sigature.java

└── tls_signature.jar

2. API说明

tls_signature.jar中含有tls_sigature.java这个源码文件,这个文件也是API的接口文件。里面有详细的接口说明,请开发者参考。

【特别注意】

接口中的publicBase64Key和privateBase64Key两个参数基本对应TLS官方网站公私钥生成页面上生成的公私钥。对于公钥:直接取公钥文件中的所有内容赋值给publicBase64Key参数即可;对于私钥,需要用tls api的tools目录下:openssl命令行工具一点额外的格式转换:

示例:./openssl pkcs8 -topk8 -in ec_key.pem -outform PEM -out p8_priv.pem -nocrypt

在tools目录下执行:openssl pkcs8 -topk8 -in ec_key.pem -outform PEM -out p8_priv.pem -nocrypt

格式转换后的,从p8_priv.pem取出所有的文件内容赋值给privateBase64Key参数就可以进行加密了。

PHP接口

php实现的方式较为简单,就是调用命令行工具生成sig,工具是bin/signature,php的调用方式如下,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: