基于Skynet增加RSA签名
一、背景最近接入skynet做游戏的时候, 需要做一个自研 SDK 埋点对接,游戏服务器与 SDK 服务器通信需使用 RSA 签名规则:游戏服务器调用 SDK:使用私钥签名(SHA1WithRSA)SDK 通知游戏服务器:使用公钥验签(SHA1WithRSA)密钥编码:base64所以写这个文档用于记录二、OpenSSL 动态库依赖本项目使用系统 OpenSSL 动态库(libssl.so / libcrypto.so),编译时通过 -lssl -lcrypto 链接。2.1 开发环境准备Ubuntu/Debian:sudo apt install libssl-devCentOS/RHEL:sudo yum install openssl-develmacOS:brew install openssl(可能需要设置 PKG_CONFIG_PATH)若需指定非系统路径(如自编译 OpenSSL),可在 Makefile 中添加 -L/path/to/openssl/lib 和 -I/path/to/openssl/include。三、Makefile 修改3.1 skynet/Makefile将原有 TLS 相关配置修改为:**OpenSSL 动态库** TLS_MODULE = ltls TLS_INC = /usr/include/openssl # 系统默认路径,可根据实际情况修改 TLS_LIB = /usr/lib # 系统默认路径,可根据实际情况修改 **CFLAGS 增加 RSA 宏** CFLAGS = -ggdb3 -O2 -Wall -I$(LUA_INC) $(MYCFLAGS) -DCLIENT_USE_4_SIZE_BYTES -DUSE_RSA_SIGNskynet.so 编译行改为链接动态库(去掉静态库路径):$(LUA_CLIB_PATH)/skynet.so : $(addprefix lualib-src/,$(LUA_CLIB_SKYNET)) | $(LUA_CLIB_PATH) $(CC) $(CFLAGS) $(SHARED) $^ -o $@ -Iskynet-src -Iservice-src -Ilualib-src -I$(TLS_INC) -lssl -lcrypto若 OpenSSL 安装在非标准路径(如 /opt/openssl),则需添加 -L 和 -Wl,-rpath:$(LUA_CLIB_PATH)/skynet.so : ... $(CC) $(CFLAGS) $(SHARED) $^ -o $@ -Iskynet-src -Iservice-src -Ilualib-src -I/opt/openssl/include -L/opt/openssl/lib -Wl,-rpath=/opt/openssl/lib -lssl -lcryptoltls.so 原有规则不变(TLS_MODULE=ltls 时已依赖 -lssl -lcrypto,无需额外修改)。四、C 层实现:扩展 lua-crypt4.1 新增头文件在 skynet/lualib-src/lua-crypt.c 顶部,#include unistd.h 之后添加:#ifdefUSE_RSA_SIGN#includeopenssl/pem.h#includeopenssl/bio.h#includeopenssl/evp.h#includeopenssl/err.h#endif4.2 新增 RSA 签名函数在 luaopen_skynet_crypt 之前添加:#ifdefUSE_RSA_SIGNstaticintlrsa_sign_sha1(lua_State*L){size_tkey_len,data_len;constchar*key_str=luaL_checklstring(L,1,key_len);constchar*data=luaL_checklstring(L,2,data_len);BIO*bio=BIO_new_mem_buf(key_str,(int)key_len);EVP_PKEY*pkey=PEM_read_bio_PrivateKey(bio,NULL,NULL,NULL);BIO_free(bio);if(!pkey)returnluaL_error(L,"rsa_sign_sha1: invalid private key (expect PEM)");size_tsig_len;EVP_MD_CTX*ctx=EVP_MD_CTX_new();if(EVP_DigestSignInit(ctx,NULL,EVP_sha
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2412496.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!