是否有可能使用node.js和crypto签署一个Passbook清单?

我想弄清楚如何使用node.js和crypto签署iOS Passbook pass manifest.json。 这似乎应该是可能的,但我似乎无法创build一个合适的签名。

以下是我所尝试的:

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');使用了不正确的参数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 

一些相关资源:

  • 如何使用NodeJSencryption签署文件?
  • 使用openssl签署通行证 – https://github.com/assaf/node-passbook/blob/master/lib/pass.js#L342
  • encryption文档 – http://nodejs.org/api/crypto.html#crypto_class_sign
  • 无法生成Apple Passbook签名

Interesting Posts