4

Node.jsとcryptoを使用してiOS Passbook pass 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 に関連付けられたパスフレーズはありません。

私が見ることができる 1 つの考えられる問題は、署名プロセス中に 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

関連リソース:

4

1 に答える 1