1628209366284721_个人页

个人头像照片 1628209366284721
个人头像照片
0
1
0

个人介绍

暂无个人介绍

擅长的技术

获得更多能力
通用技术能力:

暂时未有相关通用技术能力~

云产品技术能力:

暂时未有相关云产品技术能力~

阿里云技能认证

详细说明
暂无更多信息

2019年09月

正在加载, 请稍后...
暂无更多信息
  • 回答了问题 2019-09-12

    官方的php sdk 里面并没有公钥证书签名的方法

    function getSn($filepath, $isroot = false) { $fileData = file_get_contents($filepath); if ($isroot) { return getRootCertSN($fileData); } else { return getCertSN($fileData); } return $md5_str; } function getRootCertSN($str) { // return '687b59193f3f462dd5336e5abf83c5d8_02941eef3187dddf3d3b83462e1dfcf6'; $arr = preg_split('/(?=-----BEGIN)/', $str, -1, PREG_SPLIT_NO_EMPTY); $str = null; foreach ($arr as $e) { $sn = getCertSN($e, true); if (!$sn) { continue; } if ($str === null) { $str = $sn; } else { $str .= '_' . $sn; } } return $str; } function getCertSN($str, $matchAlgo = false) { /* 根据java SDK源码:AntCertificationUtil::getRootCertSN 对证书链中RSA的项目进行过滤(猜测是gm国密算法java抛错搞不定,故意略去) java源码为: if(c.getSigAlgOID().startsWith('1.2.840.113549.1.1')) 根据 https://www.alvestrand.no/objectid/1.2.840.113549.1.1.html 该OID为RSA算法系。 */ if ($matchAlgo) { openssl_x509_export($str, $out, false); if (!preg_match('/Signature Algorithm:.*?RSA/im', $out, $m)) { return; } } $a = openssl_x509_parse($str); $issuer = null; // 注意:根据java代码输出,需要倒着排列 CN,OU,O foreach ($a['issuer'] as $k => $v) { if ($issuer === null) { $issuer = '$k=$v'; } else { $issuer = '$k=$v,' . $issuer; } } # echo($issuer . $a['serialNumber'] . '\n'); $serialNumberHex = decimalNotation($a['serialNumberHex']); $sn = md5($issuer . $serialNumberHex); return $sn; } function decimalNotation($hex) { $dec = 0; $len = strlen($hex); for ($i = 1; $i 修复16进制转10进制问题
    踩0 评论4
正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息