У меня есть класс с методом, который я назвал 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
}
Проблема:
При отправке 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
Мобильная версия