Проверьте сертификат WebAuthentication X.509 в Rust

Я реализую регистрацию ключа WebAuthentication в Rust. Я застрял в инструкции 14 или регистрирую новые учетные данные:

Убедитесь, что attStmt является правильным оператором аттестации, передающим действительную подпись аттестации, с помощью процедуры проверки формата fmt оператора аттестации, заданной attStmt, authData и хешем сериализованных данных клиента, вычисленных на шаге 7.

Это объясняется далее как:

Если присутствует x5c, это указывает на то, что тип подтверждения не ECDAA. В этом случае:

Убедитесь, что sig является действительной сигнатурой для конкатенации authenticatorData и clientDataHash, используя открытый ключ аттестации в athstnCert с алгоритмом, указанным в alg.

Убедитесь, что atte attestst meets meetsert meets meets meets meets удовлетворяет требованиям в §8.2.1 Требования к сертификату упакованного сертификата аттестации.

Если atstnCert содержит расширение с OID 1.3.6.1.4.1.45724.1.1.4 (id-fido-gen-ce-aaguid), убедитесь, что значение этого расширения соответствует aaguid в authenticatorData.

В случае успеха, верните тип подтверждения Basic и доверительный путь доверия x5c.

В §8.2.1 мы узнаем, что attestnCert должен быть закодирован. Поэтому я разобрал attestnCert как дер, используя der_parser обрешетка:

let parsed = parse_der(attestn_cert).unwrap();
// Cert parses successfully as a der: 
println!("Parsed attestation cert: {:?}", parsed);

Тогда я использую webpki ящик для проверки сертификата. Следуя примеру, я могу написать:

let ee_input = untrusted::Input::from(attestn_cert);
let cert = webpki::EndEntityCert::from(ee_input).unwrap(); 

Однако в этот момент я застрял. Все примеры в webpki Ящик включает проверку цепочки сертификатов. Насколько я понимаю, устройство FIDO-U2f по сути является самоподписанным.

Как я могу проверить сертификат X.509, возвращенный потоком WebAuthentication в Rust?

Полный код здесь

0 ответов

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