雲通信-騰訊雲,TLS獨立模式公私鑰生成

雲通信-騰訊雲,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) (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的調用方式如下,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章