Какие ошибки возникают при работе с файлом 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.
Заранее спасибо.