On to, 18 maalis 2021, Julien Rische via FreeIPA-users wrote:
Hello everyone,
We are currently trying to establish a simple cross-realm between an IPA and an
AD domain (not a trust). This is due the specific setup we have: we already
have an external source of users and groups information exporting to both
domains, hence we don't really have a need for the features the trust provides.
Clients can just lookup any user/group information from their own domain's
identity manager.
The only thing we would need is for AD users to be able to access IPA-managed
services. But since clients usually only have one available credential cache at
a time, we need at least a one-way Kerberos-level cross-realm.
Apparently, we are not the first ones facing the issue described
hereafter[1][2], but I couldn't find any trace of a successful outcome.
Will not work, sorry. You have to establish trust because both IPA and
AD expect MS-PAC record in the tickets to accept them. Lack of MS-PAC
leads to rejection that you can see as handle_authdata error. [MS-KILE]
spec says that KILE-compatible client always requests PAC padata type
when generating KRB_AS-REQ message (3.2.5.5) and during during
KRB_TGS-REQ request (3.2.5.7).
IPA's implementation of the KDB driver relies on the trust object
records in LDAP database when creating and signing PAC records for
tickets to be created over cross-realm trust because these records
contain required additional details otherwise not available in Kerberos
principals for cross-realm TGTs.
This is our setup:
- IPA
- Version: 4.8.7
- Realm: IPA.EXAMPLE.COM
- DNS domain: ipa.example.com
- Server: server01.ipa.example.com
- AD
- Functional level: Windows Server 2008 R2
- Realm: AD.EXAMPLE.COM
- DNS domain: ad.example.com
- Domain controller: dc01.ad.example.com
The configuration of the cross-realm was done this way (same password on both
domains):
On dc01.ad.example.com AD domain controller:
===
ksetup /addkdc IPA.EXAMPLE.COM server01.ipa.example.com
netdom trust IPA.EXAMPLE.COM /domain:ad.example.com /add /realm /passwordt:XXXXX
ksetup /SetEncTypeAttr IPA.EXAMPLE.COM AES256-CTS-HMAC-SHA1-96
===
On server01.ipa.example.com IPA server (the "ipa-setup-override-restrictions"
argument seems to be mandatory[3]):
===
kadmin.local -x ipa-setup-override-restrictions
kadmin.local: add_principal -requires_preauth -e
'aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96' -pw XXXXX
krbtgt/[email protected]
===
The cross-realm TGT is visible in LDAP:
===
$ ldapsearch -LLL -o ldif-wrap=no -QY GSSAPI -H
ldaps://server01.ipa.example.com
krbCanonicalName=krbtgt/[email protected]
dn:
krbPrincipalName=krbtgt/[email protected],cn=IPA.EXAMPLE.COM,cn=kerberos,dc=ipa,dc=example,dc=com
objectClass: krbprincipal
objectClass: krbprincipalaux
objectClass: krbTicketPolicyAux
objectClass: top
krbPrincipalName: krbtgt/[email protected]
krbCanonicalName: krbtgt/[email protected]
krbLastPwdChange: 20210318113328Z
krbTicketFlags: 128
krbExtraData:: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX==
krbPwdPolicyReference: cn=Default Kerberos Service Password Policy,cn=Kerberos
Service Password Policy,cn=IPA.EXAMPLE.COM,cn=kerberos,dc=ipa,dc=example,dc=com
===
We configured an AD test client :
===
[libdefaults]
default_realm = AD.EXAMPLE.COM
ticket_lifetime = 25h
renew_lifetime = 120h
dns_lookup_realm = false
dns_lookup_kdc = false
forwardable = true
[domain_realm]
.ipa.example.com = IPA.EXAMPLE.COM
.ad.example.com = AD.EXAMPLE.COM
[realms]
IPA.EXAMPLE.COM = {
admin_server = server01.ipa.example.com
kpasswd_server = server01.ipa.example.com
kdc = server01.ipa.example.com
}
AD.EXAMPLE.COM = {
kpasswd_server = dc01.ad.example.com
admin_server = dc01.ad.example.com
kdc = dc01.ad.example.com
}
[capaths]
AD.EXAMPLE.COM = {
IPA.EXAMPLE.COM = .
}
IPA.EXAMPLE.COM = {
AD.EXAMPLE.COM = .
}
===
We authenticate as an AD user and request an IPA service ticket:
===
$ kinit [email protected]
$ KRB5_TRACE=/dev/stderr kvno HTTP/[email protected]
: Getting credentials [email protected] ->
HTTP/[email protected] using ccache
FILE:/tmp/krb5cc_0_8LQSGjNfp4
: Retrieving [email protected] ->
HTTP/[email protected] from FILE:/tmp/krb5cc_0_8LQSGjNfp4
with result: -1765328243/Matching credential not found (filename:
/tmp/krb5cc_0_8LQSGjNfp4)
: Retrieving [email protected] -> krbtgt/[email protected] from
FILE:/tmp/krb5cc_0_8LQSGjNfp4 with result: -1765328243/Matching credential not
found (filename: /tmp/krb5cc_0_8LQSGjNfp4)
: Retrieving [email protected] -> krbtgt/[email protected] from
FILE:/tmp/krb5cc_0_8LQSGjNfp4 with result: 0/Success
: Starting with TGT for client realm: [email protected] ->
krbtgt/[email protected]
: Retrieving [email protected] -> krbtgt/[email protected] from
FILE:/tmp/krb5cc_0_8LQSGjNfp4 with result: -1765328243/Matching credential not
found (filename: /tmp/krb5cc_0_8LQSGjNfp4)
: Requesting TGT krbtgt/[email protected] using TGT
krbtgt/[email protected]
: Generated subkey for TGS request: aes256-cts/053B
: etypes requested in TGS request: aes256-cts, aes128-cts, aes256-sha2,
aes128-sha2, rc4-hmac, camellia128-cts, camellia256-cts
: Encoding request body and padata into FAST request
: Sending request (1747 bytes) to AD.EXAMPLE.COM
: Resolving hostname dc01.ad.example.com
: Initiating TCP connection to stream XXXX:XXXX:XXX:XX::XXX:XXX:88
: Initiating TCP connection to stream XXX.XXX.XX.XXX:88
: Sending TCP request to stream XXX.XXX.XX.XXX:88
: Received answer (1660 bytes) from stream XXX.XXX.XX.XXX:88
: Terminating TCP connection to stream XXXX:XXXX:XXX:XX::XXX:XXX:88
: Terminating TCP connection to stream XXX.XXX.XX.XXX:88
: Response was not from master KDC
: Decoding FAST response
: FAST reply key: aes256-cts/B731
: TGS reply is for [email protected] -> krbtgt/[email protected]
with session key aes256-cts/A6B0
: TGS request result: 0/Success
: Storing [email protected] -> krbtgt/[email protected] in
FILE:/tmp/krb5cc_0_8LQSGjNfp4
: Received TGT for service realm: krbtgt/[email protected]
: Requesting tickets for HTTP/[email protected],
referrals on
: Generated subkey for TGS request: aes256-cts/6AFE
: etypes requested in TGS request: aes256-cts, aes128-cts, aes256-sha2,
aes128-sha2, rc4-hmac, camellia128-cts, camellia256-cts
: Encoding request body and padata into FAST request
: Sending request (1754 bytes) to IPA.EXAMPLE.COM
: Resolving hostname server01.ipa.example.com
: Initiating TCP connection to stream XXXX:XXXX:XXX:XX::XXX:XXX:88
: Sending TCP request to stream XXXX:XXXX:XXX:XX::XXX:XXX:88
: Received answer (479 bytes) from stream XXXX:XXXX:XXX:XX::XXX:XXX:88
: Terminating TCP connection to stream XXXX:XXXX:XXX:XX::XXX:XXX:88
: Response was not from master KDC
: Decoding FAST response
: TGS request result: -1765328324/KDC returned error string: HANDLE_AUTHDATA
: Requesting tickets for HTTP/[email protected],
referrals off
: Generated subkey for TGS request: aes256-cts/EB57
: etypes requested in TGS request: aes256-cts, aes128-cts, aes256-sha2,
aes128-sha2, rc4-hmac, camellia128-cts, camellia256-cts
: Encoding request body and padata into FAST request
: Sending request (1754 bytes) to IPA.EXAMPLE.COM
: Resolving hostname server01.ipa.example.com
: Initiating TCP connection to stream XXXX:XXXX:XXX:XX::XXX:XXX:88
: Sending TCP request to stream XXXX:XXXX:XXX:XX::XXX:XXX:88
: Received answer (479 bytes) from stream XXXX:XXXX:XXX:XX::XXX:XXX:88
: Terminating TCP connection to stream XXXX:XXXX:XXX:XX::XXX:XXX:88
: Response was not from master KDC
: Decoding FAST response
: TGS request result: -1765328324/KDC returned error string: HANDLE_AUTHDATA
kvno: KDC returned error string: HANDLE_AUTHDATA while getting credentials for
HTTP/[email protected]
$ klist -def
Ticket cache: FILE:/tmp/krb5cc_0_8LQSGjNfp4
Default principal: [email protected]
Valid starting Expires Service principal
03/18/2021 15:38:40 03/19/2021 01:38:40 krbtgt/[email protected]
renew until 03/23/2021 15:38:32, Flags: FRIA
Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96 , AD
types:
03/18/2021 15:38:49 03/19/2021 01:38:40 krbtgt/[email protected]
Flags: FA, Etype (skey, tkt): aes256-cts-hmac-sha1-96,
aes256-cts-hmac-sha1-96 , AD types:
===
This is what the error looks like on the IPA KDC side:
===
TGS_REQ : handle_authdata (22)
TGS_REQ (7 etypes {aes256-cts-hmac-sha1-96(18), aes128-cts-hmac-sha1-96(17),
aes256-cts-hmac-sha384-192(20), aes128-cts-hmac-sha256-128(19),
DEPRECATED:arcfour-hmac(23), camellia128-cts-cmac(25),
camellia256-cts-cmac(26)}) XXXX:XXXX:XXX:XX::XXX:XXX: HANDLE_AUTHDATA: authtime
1616078320, etypes {rep=UNSUPPORTED:(0)} [email protected] for
HTTP/[email protected], Invalid argument
closing down fd 12
TGS_REQ : handle_authdata (22)
TGS_REQ (7 etypes {aes256-cts-hmac-sha1-96(18), aes128-cts-hmac-sha1-96(17),
aes256-cts-hmac-sha384-192(20), aes128-cts-hmac-sha256-128(19),
DEPRECATED:arcfour-hmac(23), camellia128-cts-cmac(25),
camellia256-cts-cmac(26)}) XXXX:XXXX:XXX:XX::XXX:XXX: HANDLE_AUTHDATA: authtime
1616078320, etypes {rep=UNSUPPORTED:(0)} [email protected] for
HTTP/[email protected], Invalid argument
closing down fd 12
===
Do you think a vanilla cross-realm between IPA and AD is possible? If yes, does
someone have an idea why the handle_authdata function[4] is failing? Are we
missing something in the configuration?
Kind regards,
Julien Rische
CERN
[1]
http://kerberos.996246.n3.nabble.com/HANDLE-AUTHDATA-error-when-trying-to-setup-Kerberos-trust-between-AD-and-FreeIPA-td50000.html
[2]
https://lists.fedorahosted.org/archives/list/[email protected]/thread/LP5CLT6BUTGZ4LYJPMINEUL6HRGURKCZ/
[3] https://bugzilla.redhat.com/show_bug.cgi?id=1035494
[4]
https://github.com/krb5/krb5/blob/krb5-1.18.2-final/src/kdc/kdc_authdata.c#L806
_______________________________________________
FreeIPA-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]
Fedora Code of Conduct:
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives:
https://lists.fedorahosted.org/archives/list/[email protected]
Do not reply to spam on the list, report it:
https://pagure.io/fedora-infrastructure
--
/ Alexander Bokovoy
Sr. Principal Software Engineer
Security / Identity Management Engineering
Red Hat Limited, Finland
_______________________________________________
FreeIPA-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]
Fedora Code of Conduct:
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives:
https://lists.fedorahosted.org/archives/list/[email protected]
Do not reply to spam on the list, report it:
https://pagure.io/fedora-infrastructure