weixin_39830588
weixin_39830588
2020-11-30 13:46

GMSSL编译运行Java Wrapper踩坑记录

在Mac上,按以下官方文档的攻略是可以编译通过的,但是在Linux上加上java就编译失败!

首先,按官方攻略把Mac流程跑通

//官方攻略BEGIN

编译Java接口 由于GmSSL编译脚本还不能实现在所有操作系统上自动编译Java接口代码,因此编译脚本中默认没有启用Java接口的编译。 开启方式如下: 在源代码根目录下找到Configure文件,找到


$config{dirs} = [ "crypto", "ssl", "engines", "apps", "util", "tools", "fuzz", "test" ];

这一行,并将其修改为


$config{dirs} = [ "crypto", "ssl", "engines", "apps", "util", "tools", "fuzz", "test", "java" ];

重新编译,则可以自动编译java目录下的C代码和Java代码,并生成libgmssljni动态库和GmSSL.class。 这个模块的编译目前在Mac下可以测试通过。 在Linux和Mac下的编译和安装


./config
make
make test
sudo make install

//官方攻略End

在Mac上,编译完成后能产生两个dylib,一个是libgmssljni.dylib, 另一个是libcrypto.dylib image

接着,把java目录里头的GmSSL.java 拿出来,切记切记,项目中要保持原文件中给出的package包路径org.gmssl建目录

image

在GmSSL.java底部的loadLibrary,指向的就是libgmssljni.dylib (Mac OS), 如果是Linux则是libgmssljni.so


static {
    System.loadLibrary("gmssljni");
}

接着运行GmSSL中的main方法,注意,要在VMOption中添加java.library.path为上述libgmssljni.dylib和libcrypto.dylib所在目录,例如:


-Djava.library.path=/Users/matt/Documents/securityworkspace/GmSSL

得到正确的运行结果 image

在Linux下的成功编译经验:

1、保持Configure文件中$config{dirs}原来的设置,不要添加java目录,完成make install,会在GmSSL目录内得到libcrypto.so image

2、接着进入java目录, 参考build.sh按下面的命令进行编译,build.sh中-L /path/to/gmssl/lib 其实就是gmssl根目录,加了lib有点误导人


gcc -shared -fPIC -Wall -I./jni -I /home/java/gmssl/include -L /home/java/gmssl GmSSL.c -lcrypto -o libgmssljni.so

编译成功,得到libgmssljni.so, 例如: image

3、把步骤1中编译出的libcrypto.so 拷到当前java目录,当前目录一共要有3个东西 image

4、最后,编译GmSSL.java 并运行


mkdir -p org/gmssl
cp GmSSL.java org/gmssl
javac org/gmssl/GmSSL.java

java -Djava.library.path=/home/java/GmSSL/java -classpath /home/java/GmSSL/java org.gmssl.GmSSL

image

现在说下我是怎么发现这个坑的,一开始好不容易编译通过了,直接运行,报错 image

看着就像方法名不对,按master的最新GmSSL.java源码,和官网过期GmSSL Wrapper示例源码都不对,苦寻无果,只好把libgmssljni.so 用IDA-Pro反编译了一下,看到写死的类路径的时候,一度想要砸键盘 image

该提问来源于开源项目:guanzhi/GmSSL

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

8条回答

  • weixin_39737233 weixin_39737233 4月前

    我微信 wenzel 求加群

    点赞 评论 复制链接分享
  • weixin_39719749 weixin_39719749 4月前

    大佬,我也在弄国密java相关,可否加个QQ,微信啥的,一起研究下,我这里有个群,大家可以一起研究下

    可否加我一个QQ 1092984657,最近也在弄GMSSL的东西

    兄弟也留个微信吧,都统一微信群吧

    我微信 zheng19901091

    点赞 评论 复制链接分享
  • weixin_39634067 weixin_39634067 4月前

    大佬,我也在弄国密java相关,可否加个QQ,微信啥的,一起研究下,我这里有个群,大家可以一起研究下

    可否加我一个QQ 1092984657,最近也在弄GMSSL的东西

    兄弟也留个微信吧,都统一微信群吧

    点赞 评论 复制链接分享
  • weixin_39634067 weixin_39634067 4月前

    我微信号:TZ_Breaker

    点赞 评论 复制链接分享
  • weixin_39830588 weixin_39830588 4月前

    大佬,我也在弄国密java相关,可否加个QQ,微信啥的,一起研究下,我这里有个群,大家可以一起研究下

    留个微信我加您?

    点赞 评论 复制链接分享
  • weixin_39603469 weixin_39603469 4月前

    给蜀黍点个赞

    点赞 评论 复制链接分享
  • weixin_39719749 weixin_39719749 4月前

    大佬,我也在弄国密java相关,可否加个QQ,微信啥的,一起研究下,我这里有个群,大家可以一起研究下

    可否加我一个QQ 1091984657,最近也在弄GMSSL的东西

    点赞 评论 复制链接分享
  • weixin_39634067 weixin_39634067 4月前

    大佬,我也在弄国密java相关,可否加个QQ,微信啥的,一起研究下,我这里有个群,大家可以一起研究下

    点赞 评论 复制链接分享

为你推荐