Какие ошибки возникают при работе с файлом p12, закодированным base64 с использованием node-forge в React?

Я хотел бы отправить p12 файл на сервер на интерфейсной странице React

ниже мой React код,

handleChange(e) {
    const nextState = {};
    const file = e.target.files[0];

    if (file) {
        const reader = new FileReader();

        reader.onload = e => {
            nextState.file = e.target.result;
            this.setState(nextState, function () {
                const formData = new FormData();

                formData.append('file', this.state.file);

                const data = {
                    p12: formData,
                    password: "password"
                };

                API.post('URL', data)
                    .then(res => console.log(res))
                    .catch(err => console.error(err));
            });
        }
        reader.readAsDataURL(file);
    }
}

И тогда я получил эти ошибки, которые я не знаю ни одной причины, почему происходит каждая ошибка.

"Ошибка типа: input.replace не является функцией \n в Object.util.decode64 (/src/node_modules/node-forge/lib/util.js:1594:17)\n"

Я получаю эту ошибку в обычном случае, но иногда я получаю и другую ошибку.

"Ошибка: bad platformCredential, это плохая platformCredential\n в Promise (/src/controllers/project/setting/push/v1.js:226:89)\n в новом Promise ()\n в registerPush (/src/controllers/project/setting/push/v1.js:213:10)\n"

Когда я рассматривал эту ошибку, неправильный пароль для p12 вызвал эту ошибку, но у меня есть правильный пароль для файла p12. И я написал код, который сначала проверит валидацию файла p12. Поэтому я не мог понять.

И иногда я получаю последнюю ошибку, как показано ниже,

"Ошибка: слишком мало байтов для разбора DER.\ N в _checkBufferLength (/src/node_modules/node-forge/lib/asn1.js:357:17)\n в _getValueLength (/src/node_modules/node-forge/lib/asn1.js:395:5)\n в _fromDer (/src/node_modules/node-forge/lib/asn1.js:481:16)\n в Object.asn1.fromDer (/src/node_modules/node-forge/) Библиотека /asn1.js:448:10)\ п"

И это мой внутренний код для моего сервера.

const forge           = require( 'node-forge' );
exports.setIosDevelopmentPush = ( req, res ) => {

  const accountId = req.headers.account_id;

  // header validation
  if( ! accountId ) {
    throw errorManager.UndefinedParameterError( '', 'acount_id', new Error() );
  };

  const gameId = req.params.id;

  // params validation
  if( ! gameId ) {
    throw errorManager.UndefinedParameterError( '', 'id', new Error() );
  }

  let password = req.body.password;
  let file = req.body.p12;

  // body validation
  if( ! file ) {
    throw errorManager.UndefinedParameterError( '', 'file', new Error() );
  }

  if( ! password ) {
    throw errorManager.UndefinedParameterError( '', 'password', new Error() );
  }

  let iosPrivateKey = '';
  let iosCert = '';

  // get private key and certificate from .p12 file
  try {
    let p12Der = forge.util.decode64( file );
    let p12Ans1 = forge.asn1.fromDer( p12Der, false );

    let p12 = forge.pkcs12.pkcs12FromAsn1( p12Ans1, false, password );
    let key = p12.safeContents[1].safeBags[0].key;
    let pki = forge.pki;
    let rsaPem = pki.privateKeyToPem( key );
    let privateKey = pki.privateKeyFromPem( rsaPem );
    let rsaPrivateKey = pki.privateKeyToAsn1( privateKey );
    let privateKeyInfo = pki.wrapRsaPrivateKey( rsaPrivateKey );

    iosPrivateKey = pki.privateKeyInfoToPem( privateKeyInfo );
    iosCert = pki.certificateToPem( p12.safeContents[0].safeBags[0].cert );
  } catch ( e ) {
    common.responseError( errorManager.BadParameterError( '', 'p12', e ), req, res );
  }

  registerPush( gameId, 'APNS_SANDBOX', iosPrivateKey, iosCert )
  .then( result => {
    res.status( 204 ).json({});
  })
  .catch( err => {
    common.responseError( err, req, res );
  })

};

И я не смог найти причину этих ошибок, и я хотел бы знать, возникает ли эта проблема на Front-end или на Back-end.

Заранее спасибо.

0 ответов

Другие вопросы по тегам