Sto facendo fatica a capire come dovrebbe essere la struttura di una richiesta di preautenticazione in Kerberos. Dopo aver letto RFC 4556 e le RFC di riferimento, sono ancora confuso a causa di tutti i diversi casi.
Il mio caso è il seguente: Voglio autenticarmi su un dominio Windows con un certificato che ho recuperato dalla CA che appartiene al dominio. Il certificato contiene l'URL di crl e il suo algoritmo di firma è sha256RSA. La chiave pubblica contenuta è una chiave RSA2048. Per quanto ho capito, dovrei inviare questo certificato e firmarlo. Sono anche consapevole del fatto che devo inviare un nonce per evitare attacchi di replay.
Non sono chiaro cosa deve essere firmato, cioè cosa deve essere in questa parte della richiesta.
PA-PK-AS-REQ ::= SEQUENCE {
signedAuthPack [0] IMPLICIT OCTET STRING,
-- Contains a CMS type ContentInfo encoded
-- according to [RFC3852].
Gli stati della RFC 3852:
SignedData ::= SEQUENCE {
version CMSVersion,
digestAlgorithms DigestAlgorithmIdentifiers,
encapContentInfo EncapsulatedContentInfo,
certificates [0] IMPLICIT CertificateSet OPTIONAL,
crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
signerInfos SignerInfos }
Anche se ci sono molte spiegazioni su tutti questi punti, temo di essere un idiota perché non capisco. Soprattutto quello che appartiene alla versione e encapContentInfo (penso che la firma dovrebbe andare nel campo econtent di EncapsulatedContentInfo, ma non sono sicuro).
Dato che le specifiche sono un po 'confuse, non capisco cos'altro deve essere in questa richiesta e cosa no.
Qualcuno può far luce su questo e chiarire come dovrebbe essere la struttura della richiesta completa?
Modifica
OK, dopo alcune ricerche sono ancora più confuso. RFC 4556 afferma che la struttura di PkAuthenticator in AuthPack dovrebbe assomigliare a questa:
PKAuthenticator ::= SEQUENCE {
cusec [0] INTEGER -- (0..999999) --,
ctime [1] KerberosTime,
nonce [2] INTEGER (0..4294967295),
paChecksum [3] OCTET STRING OPTIONAL,
...
}
Sniffing the smartcard-authentication-traffic with wireshark Ho ottenuto questa struttura PKAuthenticator in un ambiente 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
Questo è il solito comportamento di microsoft che fa le proprie cose indipendentemente da quello che dice la specifica o mi manca qualcosa?