Me cuesta entender cómo debería ser la estructura de una solicitud de autenticación previa en kerberos. Después de leer el RFC 4556 y los RFC referenciados, todavía estoy confundido debido a todos los diferentes casos.
Mi caso de uso es el siguiente: quiero autenticarme en un dominio de Windows con un certificado que recuperé de la CA que pertenece al dominio. El certificado contiene la URL de crl y su algoritmo de firma es sha256RSA. La clave pública contenida es una clave RSA2048. Según tengo entendido, debo enviar este certificado y firmarlo. También soy consciente de que debo enviar un correo electrónico para evitar los ataques de repetición.
No tengo claro qué se debe firmar, es decir, qué se debe incluir en esta parte de la solicitud.
PA-PK-AS-REQ ::= SEQUENCE {
signedAuthPack [0] IMPLICIT OCTET STRING,
-- Contains a CMS type ContentInfo encoded
-- according to [RFC3852].
RFC 3852 estados:
SignedData ::= SEQUENCE {
version CMSVersion,
digestAlgorithms DigestAlgorithmIdentifiers,
encapContentInfo EncapsulatedContentInfo,
certificates [0] IMPLICIT CertificateSet OPTIONAL,
crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
signerInfos SignerInfos }
Aunque todos estos puntos tienen muchas explicaciones, me temo que soy un tonto porque no lo entiendo. Especialmente lo que pertenece a la versión y encapContentInfo (creo que la firma debe ir en el campo de contenido del EncapsulatedContentInfo, pero no estoy seguro).
Como la especificación es un poco confusa, simplemente no entiendo qué más debe haber en esta solicitud y qué no.
¿Alguien puede arrojar algo de luz sobre esto y aclarar cómo debería ser la estructura de la solicitud completa?
EDIT
Bien, después de algunas investigaciones estoy aún más confundido. RFC 4556 establece que la estructura de PkAuthenticator en el AuthPack debería tener este aspecto:
PKAuthenticator ::= SEQUENCE {
cusec [0] INTEGER -- (0..999999) --,
ctime [1] KerberosTime,
nonce [2] INTEGER (0..4294967295),
paChecksum [3] OCTET STRING OPTIONAL,
...
}
Detectando el tráfico de autenticación con tarjeta inteligente con wireshark Obtuve esta PKAuthenticator-structure en un entorno de Microsoft:
SEQUENCE(1 elem)
[0](1 elem)
SEQUENCE(5 elem)
[0](1 elem)
SEQUENCE(2 elem)
[0](1 elem)
INTEGER2
[1](1 elem)
SEQUENCE(2 elem)
GeneralString
GeneralString
[1](1 elem)
GeneralString
[2](1 elem)
INTEGER 563793
[3](1 elem)
GeneralizedTime 2016-12-01 13:53:08 UTC
[4](1 elem)
INTEGER 1051204026
¿Es este el comportamiento habitual de Microsoft haciendo lo suyo independientemente de lo que diga la especificación o me falta algo?