日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php gmssl,centos7 php7 gmssl编译安装

發布時間:2023/12/10 php 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php gmssl,centos7 php7 gmssl编译安装 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景:

linux已通過源碼安裝openssl(假設安裝目錄為:/usr/local/openssl),目前php安裝時所指定的openssl未能支持國密算法,若希望php也能實現國密算法,則編譯安裝php時,需指定gmssl(而非openssl)。

安裝GmSSL:

1、下載源代碼(GmSSL-master.zip),解壓縮至當前工作目錄

# unzip GmSSL-master.zip

2、編譯與安裝

# ./config --prefix=/usr/local/gmssl --openssldir=/usr/local/gmssl/ssl

# make

# make test

# make install

若在安裝過程中出現:pod2man: command not found 錯誤信息,請使用whereis pod2man命令查看是否安裝了pod2man,否則執行yum-yinstall perl-podlators進行安裝(建議重裝,即先執行yum remove perl-podlators)。

3、安裝之后可以執行gmssl命令行工具檢查是否成功

# /usr/local/gmssl/bin/gmssl version

GmSSL 2.0 - OpenSSL 1.1.0d

執行gmssl命令后,出現:/usr/local/gmssl/bin/gmssl: relocation error: /usr/local/gmssl/bin/gmssl: symbol PBEPARAM_it, version OPENSSL_1_1_0d not defined in file libcrypto.so.1.1 with link time reference 錯誤!

暫時解決方法如下:

(1)查看gmssl依賴庫路徑:ldd /usr/local/gmssl/bin/gmssl

libssl.so.1.1 => /usr/local/openssl/lib/libssl.so.1.1 (0x00007fc91a5d0000)

libcrypto.so.1.1 => /usr/local/openssl/lib/libcrypto.so.1.1 (0x00007fc91a0ed000)

(2)把make后的兩個依賴庫拷貝到相應路徑(覆蓋原依賴文件,即安裝openssl時所生成的libssl.so.1.1 及libcrypto.so.1.1 文件,注意:這種方法會影響到用openssl的應用,以下操作請三思而后行!)

cd /usr/local/src/GmSSL-master

cp libcrypto.so.1.1 /usr/local/openssl/lib/

cp libssl.so.1.1 /usr/local/openssl/lib/

GmSSL與PHP綁定:

GmSSL的PHP擴展代碼位于源代碼中的的php/ext/openssl目錄,PHP擴展需要和PHP源代碼目錄樹一起編譯,過程如下:

1、下載并編譯安裝GmSSL(上一步已完成);

2、下載最新的PHP源代碼并解壓;

3、用GmSSL的php/ext/openssl目錄替代PHP源代碼中的ext/openssl目錄;

4、編譯和安裝PHP(centos7 php7.3安裝);

!!!請注意!!!

PHP的默認配置不編譯OpenSSL擴展,需要顯式指--with-openssl才會編譯OpenSSL擴展,而且,我們此處需要顯示指定gmssl,因此,在安裝php過程中,執行configure操作時,需這樣指定:./configure --with-openssl=/usr/local/gmssl --with-libdir=lib。

在執行./configure命令時,若提示:"configure: error: Cannot find OpenSSL's libraries",請執行:"ln -s /usr/local/openssl/lib/libssl.so /usr/lib",即使用openssl的libssl而非gmssl的libssl(為的是安裝gmssl時,將對openssl的影響程度降到最低)。

在編譯php過程中(執行make 或 make ZEND_EXTRA_LIBS='-liconv'命令),若出現:"make: *** [ext/openssl/xp_ssl.lo] Error 1"錯誤信息,可嘗試安裝php7.1(親測php7.1.11安裝成功)而非php7.3。

php安裝成功后,可以通過ldd檢查可執行程序是否鏈接了預期的庫:ldd /usr/local/php73/bin/php。

5、修改PHP配置文件php.ini啟用openssl擴展,即取消php.ini中extension=openssl前面的注釋。

可以通過PHP的phpinfo()函數確認openssl擴展已經啟用,通過ldd命令檢查PHP的二進制程序調用了GmSSL的動態庫而不是系統默認的OpenSSL動態庫。

國密算法測試:

OPENSSL_KEYTYPE_EC, "curve_name" => "sm2p256v1"));

openssl_pkey_export($prikey, $prikeypem);

echo $prikeypem;

$pubkeypem = openssl_pkey_get_details($prikey)["key"];

echo $pubkeypem;

$pubkey = openssl_pkey_get_public($pubkeypem);

$point = openssl_pkey_get_details($pubkey)["ec"];

printf("SM2 Public Key: (%s, %s)\n", bin2hex($point["x"]), bin2hex($point["y"]));

$ec = openssl_pkey_get_details($prikey)["ec"];

printf("SM2 Private Key: %s\n", bin2hex($ec["d"]));

openssl_sign($msg, $signature, $prikey, "sm3");

$ok = openssl_verify($msg, $signature, $pubkey, OPENSSL_ALGO_SM3);

printf("sm2sign(\"%s\") = %s\n", $msg, bin2hex($signature));

printf("sm2verify(\"%s\", %s) = %s\n", $msg, bin2hex($signature), $ok ? "OK" : "Failure");

openssl_seal($plaintext, $sealed, $ekeys, array($pubkey), "sms4", $iv);

openssl_open($sealed, $opened, $ekeys[0], $prikey, "sms4", $iv);

printf("sm2seal(\"%s\") = %s\n", $plaintext, bin2hex($sealed));

printf("sm2open(%s) = \"%s\"\n", bin2hex($sealed), $opened);

?>

如上述代碼正常執行,則說明php已支持gmssl。

參考文獻:The GmSSL Project

總結

以上是生活随笔為你收集整理的php gmssl,centos7 php7 gmssl编译安装的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。