1. 程式人生 > >交叉編譯openssl、gmssl的正確方式

交叉編譯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拷貝到目標裝置相應目錄即可。