PHP';节点JS中的openssl_符号等价物

PHP';节点JS中的openssl_符号等价物,php,node.js,openssl,Php,Node.js,Openssl,我正在(慢慢地)学习NodeJS,并试图用它来代替我的PHP脚本。我需要对使用SSL组装的字符串进行签名,以传递给curl请求 在PHP中,我是这样做的: $sig = '2018-08-24T17:33:41Z:abcdef:/path/to/api'; $pkeyid = openssl_pkey_get_private("file://YourMomGoesToCollege.pem"); // Sign 'sig' with private key if(openssl_sign(

我正在(慢慢地)学习NodeJS,并试图用它来代替我的PHP脚本。我需要对使用SSL组装的字符串进行签名,以传递给
curl
请求

在PHP中,我是这样做的:

$sig = '2018-08-24T17:33:41Z:abcdef:/path/to/api';

$pkeyid = openssl_pkey_get_private("file://YourMomGoesToCollege.pem"); 

// Sign 'sig' with private key
if(openssl_sign($sig, $signed_signature, $pkeyid, "sha256WithRSAEncryption")) {

  openssl_free_key($pkeyid);

  //Set curl header options ...
  curl_setopt($ch, CURLOPT_HTTPHEADER,
    [
    "X-Apple-CloudKit-Request-SignatureV1: " . base64_encode($signed_signature),
  ]
);

}
因此,我试图生成
$signed\u signature
的值,但我不确定如何继续。节点似乎可以做类似的事情,但其参数似乎不同。这是我最好的猜测:

const crypto = require('crypto')
const sign = crypto.createSign('SHA256')

sign.write(sig)
sign.end()

const privateKey = __dirname + 'YourMomGoesToCollege.pem'
var signedSignature = sign.sign(privateKey, 'hex')

var readyForCurl = Buffer.from(signedSignature).toString('base64')

我的思路正确吗?

以您的工作为出发点,进行一些小的修改,以下代码片段将打印相同的签名(base64编码):

PHP:

节点JS:

const crypto = require('crypto');
const sign = crypto.createSign('SHA256');
const fs = require('fs')

sign.write('some data to sign');
sign.end();

const key = fs.readFileSync('private.pem');
signature_b64 = sign.sign(key, 'base64');
console.log(signature_b64);
diff
-将两个:

$ diff <(php sign.php) <(node sign.js)
$diff
$ diff <(php sign.php) <(node sign.js)