Я реализую регистрацию ключа WebAuthentication в Rust.Я застрял в инструкции 14 или при регистрации нового удостоверения :
Убедитесь, что attStmt является правильным утверждением подтверждения, передающим действительную подпись подтверждения, используя формат подтверждения заявления fmt для проверкипроцедура, заданная attStmt, authData и хэш сериализованных данных клиента, вычисленных на шаге 7.
Это объясняется далее как:
Если присутствует x5c, это означает, чтотип подтверждения не ECDAA.В этом случае:
Убедитесь, что sig является действительной подписью для конкатенации authenticatorData и clientDataHash, используя открытый ключ аттестации в athstnCert с помощью алгоритма, указанного в alg.
Убедитесь, что atstnCert соответствует требованиямв §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?
Полный код здесь