是否有可能使用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签名