在Rust中验证WebAuthentication X.509证书

时间:2018-10-06 22:26:59

标签: rust x509 der webauthn

我正在Rust中实现WebAuthentication密钥注册。我被指令14或registering a new credential困住了:

  

验证attStmt是正确的证明声明,表示   有效的证明签名,使用证明声明格式   给出了attStmt,authData和的哈希值的fmt验证程序   步骤7中计算的序列化客户端数据。

这将进一步解释为:

  

如果存在x5c,则表明证明类型不是   ECDAA。在这种情况下:

     

验证sig是对的串联有效的签名   使用证明公钥的authenticatorData和clientDataHash   在atestnCert中使用alg中指定的算法。

     

验证attestnCert是否符合§8.2.1包装的要求   证明书证书要求。

     

如果attestnCert包含OID 1.3.6.1.4.1.45724.1.1.4的扩展名   (id-fido-gen-ce-aaguid)验证此扩展程序的值   匹配authenticatorData中的aaguid。

     

如果成功,则返回认证类型“基本”和“认证信任”   路径x5c。

我们在第8.2.1节中进一步了解到attestnCert必须经过der编码。因此,我使用attestnCert板条箱将der_parser解析为der:

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设备本质上是自签名的。

如何在Rust中验证WebAuthentication流返回的X.509证书?

完整代码为here

0 个答案:

没有答案