Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从iOS设备解包PKCS7负载(MDM注册)_Ios_Node.js_Openssl - Fatal编程技术网

从iOS设备解包PKCS7负载(MDM注册)

从iOS设备解包PKCS7负载(MDM注册),ios,node.js,openssl,Ios,Node.js,Openssl,我正在尝试构建一个MDM服务器,苹果的ruby代码是: p7sign = OpenSSL::PKCS7::PKCS7.new(req.body) store = OpenSSL::X509::Store.new p7sign.verify(nil, store, nil, OpenSSL::PKCS7::NOVERIFY) signers = p7sign.signers 我有一个非常基本的NodeJS代码来接收和存储POST负载: exports.profile = function(req

我正在尝试构建一个MDM服务器,苹果的ruby代码是:

p7sign = OpenSSL::PKCS7::PKCS7.new(req.body)
store = OpenSSL::X509::Store.new
p7sign.verify(nil, store, nil, OpenSSL::PKCS7::NOVERIFY)
signers = p7sign.signers
我有一个非常基本的NodeJS代码来接收和存储POST负载:

exports.profile = function(req, res) {
    var queryData = "";
    req.on('data', function(chunk) {
        queryData += chunk;
    });
    req.on('end', function() {
        fs.writeFileSync('out.p7s', queryData);
    });
    res.send('1');
};
但是,给定的文件:

openssl似乎根本无法识别

openssl pkcs7 -in req.p7s -inform DER -print_certs
正在返回:

unable to load PKCS7 object
140735186985436:error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long:asn1_lib.c:150:
你知道这里会出什么问题吗?有多余的填充物我应该去掉吗?给定的文件根本不是PKCS7吗

请求标头:

{ host: '192.168.22.39:3000',
  'accept-encoding': 'gzip, deflate',
  'content-type': 'application/pkcs7-signature',
  'accept-language': 'fr-fr',
  cookie: 'connect.sid=s%3Andcjz5pGCdb1AYXhNG8Us5mh.5szK2X1cOpnih9X5kCbqTUdpv8EyJRwNHl4VC6M5Gwk',
  accept: '*/*',
  'content-length': '3564',
  connection: 'keep-alive',
  'user-agent': 'Profile/1.0' }

谢谢

您共享的文件没有行尾字符。我不是NodeJS专家,但看起来您没有将文件保存为二进制文件。您可以尝试进行以下更改,看看这是否有效吗

req.on('end', function() {
    fs.writeFileSync('out.p7s', queryData, 'binary');
});

我必须使用
Buffer.concat
来正确附加二进制缓冲区并使其工作。

不起作用,我正在尝试使用缓冲区连接,可能字符串以某种方式破坏了二进制数据。@Olivier不确定这是否有帮助,但我在MDM注册期间保存了一个有效的pkcs7文件:那么最终的代码是什么样子的呢?我在中间件中使用Buffer.concat将req.rawBody作为二进制缓冲区。我遇到了你以前遇到的问题。