【问题标题】:Is it possible to sign a Passbook manifest using node.js and crypto?是否可以使用 node.js 和加密签署 Passbook 清单?
【发布时间】:2013-06-05 11:13:40
【问题描述】:

我正在尝试弄清楚如何使用 node.js 和加密对 iOS Passbook 通行证 manifest.json 进行签名。似乎应该可以,但我似乎无法创建正确的签名。

这是我尝试过的:

var crypto = require("crypto");
var fs = require('fs');

var manifest = fs.readFileSync('manifest.json');
var pem = fs.readFileSync('passbookdemo.pem');
var key = pem.toString('ascii');

var sign = crypto.createSign('RSA-SHA256');
sign.update(manifest);
var sig = sign.sign(key);

fs.writeFileSync('signature');

我之前使用以下方法生成了 passbookdemo.pem:

openssl pkcs12 -in passbookdemo.p12 -out passbookdemo.pem -nodes

没有与 passbookdemo.pem 关联的密码。

我可以看到一个可能的问题是我没有在签名过程中加入 Apple 开发者关系证书,我认为这是一项要求。

另一种可能性是我在crypto.createSign('RSA-SHA256'); 中使用了不正确的参数。我不确定我应该改用什么。

这是 Apple 提供的 ruby​​ 代码示例,我可以使用它来正确签署清单。

def sign_manifest
    puts "Signing the manifest"
    # Import the certificates
    p12_certificate = OpenSSL::PKCS12::new(File.read(self.certificate_url), self.certificate_password)
    wwdr_certificate = OpenSSL::X509::Certificate.new(File.read(self.wwdr_intermediate_certificate_path))

    # Sign the data
    flag = OpenSSL::PKCS7::BINARY|OpenSSL::PKCS7::DETACHED
    signed = OpenSSL::PKCS7::sign(p12_certificate.certificate, p12_certificate.key, File.read(self.manifest_url), [wwdr_certificate], flag)

    # Create an output path for the signed data
    self.signature_url = self.temporary_path + "/signature"

    # Write out the data
    File.open(self.signature_url, "w") do |f|
        f.syswrite signed.to_der
    end
end

一些相关资源:

【问题讨论】:

    标签: node.js certificate digital-signature private-key passbook


    【解决方案1】:

    我知道这篇文章写完已经五年了,但我偶然发现了它,并认为它值得一个答案。 对的,这是可能的。 Here is an example script 从节点调用 openssl。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 2017-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多