Конфликт заголовка криптоключа со значением p256ecdsaPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Конфликт заголовка криптоключа со значением p256ecdsa

Сообщение Anonymous »

Я не уверен, проблема ли это в PHP или криптографии, но в свободное время я использую PHP, чтобы попытаться обновить подписку через Интернет без передачи данных.
У меня есть класс с методом, который я назвал save_ssl_keys(), который генерирует ключи с помощью openssl_pkey_new(), а затем сохраняет различные сгенерированные значения в файлы. Этот метод немного длинный и работает нормально, но он использует приведенные ниже аргументы:

Код: Выделить всё

    private function ssl_args( string $type = '' ) {
$main_args  =   $type === 'dh' ?
[ 'curve_name'=>'prime256v1', 'private_key_bits'=>2048, 'digest_alg'=>OPENSSL_ALGO_SHA256, 'private_key_type'=>OPENSSL_KEYTYPE_DH ] :
[ 'curve_name'=>'prime256v1', 'digest_alg'=>OPENSSL_ALGO_SHA256, 'private_key_type'=>OPENSSL_KEYTYPE_EC ];

return this_is_localhost() ?
array_merge( [ "config" => "C:/xampp/php/extras/openssl/openssl.cnf" ], $main_args ) : $main_args;
}
После сохранения файлов я использую метод ниже, чтобы получить доступ к значениям ключей для использования:

Код: Выделить всё

    protected function app_keys() {
$secureDir  =   self::secureDir();

$private    =   new my_FileWriter( $secureDir, 'sslpriv.pem' );
$public     =   new my_FileWriter( $secureDir, 'sslpub.pem' );
$keys_EC    =   new my_FileWriter( $secureDir, 'ecvapids.json' );

$vapids     =   json_decode( $keys_EC->read() );

return (object) [
'private'   =>  $private->read(),
'public_pem'=>  $public->read(),
'private_ec'=>  myb64_decode( $vapids->private_ec ),
'public_ec' =>  myb64_decode( $vapids->public_ec ),
'public_ec_pad' =>  "\x04" . myb64_decode( $vapids->public_ec ),    # used in app server key
'ec_x'      =>  myb64_decode( $vapids->ec_x ),
'ec_y'      =>  myb64_decode( $vapids->ec_y ),
'salt_auth' =>  myb64_decode( $vapids->auth_token )
];
}
При всем этом я могу собрать ключ сервера приложений статическим методом, указанным ниже, и именно здесь начинается проблема:

Код: Выделить всё

    static function public_crypto( bool $curved ) {
$jwt    =   new self;
$keys   =   $jwt->app_keys();

// *please note the hash_hkdf() part which I had to add
return $curved ?
hash_hkdf( 'sha256', $keys->public_ec_pad, 64, 'somePublicCryptoInfoContext', $keys->salt_auth )    # used in header
: myb64_encode( $keys->public_ec_pad, true );   # works in browser
}
Функция myb64_encode( $keys->public_ec_pad, true ) создает безопасное для URL-адреса значение в кодировке Base64, которое браузеры Chrome и Edge принимают в качестве моего действительного ключа сервера приложений. Следовательно, я подписываюсь и отписываюсь при нажатии кнопок. Я пробовал это неоднократно и успешно, и данные подписки всегда возвращаются с конечной точкой и ключами.
Проблема:
При отправке Push-запрос к конечной точке подписки. Если я отправлю заголовок Crypto-Key с p256ecdsa=, я получу ответ об ошибке: отказано в разрешении: должен быть открытый ключ VAPID на кривой P-256. Итак, мне пришлось добавить часть hash_hkdf() в метод выше, который удаляет это сообщение об ошибке.
Но теперь, У меня есть ответ об ошибке: Ошибка 400 (неверный запрос)!!1
На этой странице ошибка 400 означает Неверный запрос. Обычно это означает, что один из ваших заголовков недействителен или неправильно отформатирован. И я полностью подозреваю, что это из-за этой части криптоключа.
Может ли кто-нибудь помочь объяснить, почему может быть ошибка в версии Base64 ключа сервера приложений в заголовке Crypto-Key, которая работает при подписке пользователя?
ПРИМЕЧАНИЕ. Я делаю все это на xampp моего компьютера. localhost в среде WordPress.

Подробнее здесь: https://stackoverflow.com/questions/787 ... cdsa-value
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»