天天看點

交叉編譯openssl、gmssl的正确方式

最近要在arm裝置上使用國密sm2、sm3算法,經了解,gmssl(openssl分支)能夠支援,而且最新的openssl-1.1.1預覽版也開始支援上述國密算法。

此前在ubuntu上交叉編譯過openssl-1.0.2k,使用如下腳本實作:

./config --prefix=/opt/openssl --cross-compile-prefix=arm-linux-gnueabihf- no-asm shared
sed -i "s/ -m64//g" Makefile
make
make install           

筆者所有開發環境均通過svn管控,包括庫檔案、工具等的建立過程,是以在用config生成Makefile檔案後,使用腳本自動删除arm編譯器不支援的m64選項。

當使用同樣的方法編譯gmssl後,在裝置上生成秘鑰時出現運作時錯誤;openssl-1.1.1預覽版編譯後運作則是停止響應。

經過多方摸索,終于找到了原因所在:應使用Configure配置目标平台!新的編譯腳本如下:

./Configure --prefix=/opt/openssl --cross-compile-prefix=arm-linux-gnueabihf- no-asm shared linux-armv4
make
make install           

因為是arm裝置,這裡配置目标平台為linux-armv4,其它平台編譯方式相似,使用 ./Configure --help 能夠顯示支援的所有平台。

此外,當指定arm平台時,Makefile中不會出現不支援的m64選項,也就無需删除。

使用新的編譯方式後,gmssl和openssl-1.1.1均能在arm裝置上正常工作。

可以不用make install,隻需将目前目錄的libcrypto.so.1.1、libssl.so.1.1(其它版本類似),以及apps目錄下的openssl or gmssl、openssl.cnf拷貝到目标裝置相應目錄即可。

繼續閱讀