Проверьте сертификат WebAuthentication X.509 в Rust - PullRequest
0 голосов
/ 07 октября 2018

Я реализую регистрацию ключа 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?

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

...