腾讯长安链 php 生成 Csr 文件和用户链地址

参考文档:https://cloud.tencent.com/document/product/663/83253

首先需要 php 配置支持 openssl

1、批量申请长安链用户签名证书

根据文档请求参数不难发现,生成 csr 文件内容后再经过了 base64 编码的,

/**
     * php生成证书请求文件
     * @param $organization 组织id 例:orgbeijing.chainmaker-demo
     * @param $commonName   用户名 建议和参数CertMark一致 例:user1 ,每次都必须不一样
     * @return string
     */
    public function getCsr($organization, $commonName){
        $key_pair = openssl_pkey_new([
            "private_key_type" => OPENSSL_KEYTYPE_EC,
            "curve_name" => 'prime256v1'
        ]);
        // 判断密钥是否生成成功
        if ($key_pair === false) {
            die('Failed to generate encryption key pair.');
        }
        // 获取私钥
        openssl_pkey_export($key_pair, $priKey);
        $dn = array(
            "countryName" => "CN",
            "stateOrProvinceName" => "Beijing",
            "localityName" => "Beijing",
            "organizationName" => $organization,
            "organizationalUnitName" => "client",
            "commonName" => $commonName
        );
        $csr = openssl_csr_new($dn, $priKey,  array('digest_alg' => 'sha256'));
        $csr_pem = openssl_csr_export($csr, $csr_string);
        if ($csr_pem === false) {
            die('Failed to generate csr key.');
        }
        // var_dump($csr_string);
        return  $csr_string;
    }

根据文档,不难发现生成csr文件内容后再经过了base64编码作为参数

//调用生成csr文件内容
$csr_string = $this->getCsr('orgbeijing.chainmaker-demo','user0001');
$SignCsrContent = base64_encode($csr_string);

2、从响应参数SignUserCrtList中计算用户链地址

//引入hash函数的包
kornrunner/keccak
 /**
     * 从x.509证书转换成 链地址
     * @param $certificate x.509证书
     * @return string
     * @throws \Exception
     */
    public function certToAddrStr($certificate){
        $certInfo = openssl_x509_read($certificate);
        $pub_key = openssl_pkey_get_public($certInfo);
        $pub_details = openssl_pkey_get_details($pub_key);
        $ecParams = $pub_details['ec'];
        //参数x'参数y
        $x = unpack("H*", $ecParams['x']);
        $y = unpack("H*", $ecParams['y']);
        $hash = Keccak::hash(hex2bin($x[1].$y[1]), 256);
        return '0x'.substr($hash,24 );
    }

先需要base64_decode还原成证书字符串;

// base64解码为证书字符串,再转用户地址
$certificate = base64_decode('LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNyekNDQWxXZ0F3SUJBZ0lERHZzQ01Bb0dDQ3FHU000OUJBTUNNSUdlTVFzd0NRWURWUVFHRXdKRFRqRVEKTUE0R0ExVUVDQk1IUW1WcGFtbHVaekVRTUE0R0ExVUVCeE1IUW1WcGFtbHVaekVwTUNjR0ExVUVDaE1nYjNKbgpOamwyYTJ0MVp5NWphR0ZwYm0xaGEyVnlMV2MwZVRCdlkyZGxaMmd4RWpBUUJnTlZCQXNUQ1hKdmIzUXRZMlZ5CmRERXNNQ29HQTFVRUF4TWpZMkV1YjNKbk5qbDJhMnQxWnk1amFHRnBibTFoYTJWeUxXYzBlVEJ2WTJkbFoyZ3cKSGhjTk1qSXhNVEEwTURjeU16UTBXaGNOTWpjeE1UQTBNRGN5TXpRMFdqQ0JvekVMTUFrR0ExVUVCaE1DUTA0eApFREFPQmdOVkJBZ1RCMEpsYVdwcGJtY3hFREFPQmdOVkJBY1RCMEpsYVdwcGJtY3hLVEFuQmdOVkJBb1RJRzl5Clp6WTVkbXRyZFdjdVkyaGhhVzV0WVd0bGNpMW5OSGt3YjJOblpXZG9NUTh3RFFZRFZRUUxFd1pqYkdsbGJuUXgKTkRBeUJnTlZCQU1USzNWelpYSXhMbk5wWjI0dWIzSm5OamwyYTJ0MVp5NWphR0ZwYm0xaGEyVnlMV2MwZVRCdgpZMmRsWjJnd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFUVkZuTWs2UThZbVhUWHJEZzFBYUFJCmxsSzNFcDg0K1J4dzRMb2lTOEdWUnc2U3ZHZ1NqR3VHSE52Rm84dnZNYW9JbWVnejdNZmErajc1STBOOVFBSnIKbzNzd2VUQU9CZ05WSFE4QkFmOEVCQU1DQWFZd0R3WURWUjBsQkFnd0JnWUVWUjBsQURBcEJnTlZIUTRFSWdRZwpraUcyNXJOZzhCVHdCQU1iVWpDc2ZqTHl0em1pb2x3UWt2bFR5WFNwRGlRd0t3WURWUjBqQkNRd0lvQWdFNGxJCjFtQVBIYWJkckxCU3FCbHlCdExzU0hNVkphTGNuRFdwaXF3Q3BoTXdDZ1lJS29aSXpqMEVBd0lEU0FBd1JRSWcKRUVjMTFteUhaVXdWbzF1R3VRTk1KQWV6MndEMVFWSG14UTFuVDFuU1BIZ0NJUUR4UHkwQlNyQ0hkeEFEL0swZQprZ21XaTVJV2p2R3hLYXlkZkl0RVN1QjQvUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K');
$address = $this->certToAddrStr($certificate);
//用户链地址:0xd0e31213935860536613df28108800230cb64f54

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值