> On May 6, 2024, at 2:55 PM, Osipov, Michael (IN IT IN) 
> <michael.osi...@innomotics.com> wrote:
> 
> Hi Weijun,
> 
> On 2024-05-06 20:51, Wei-Jun Wang wrote:
>> Hi Michael,
>> I see you've just reported a bug on KeyTab. Is that your latest workaround 
>> to the request here? That's also the only one I can think of now.
> 
> The bug is unrelated. I just noticed it when working on the issue.
> 
>> BTW, when you said "disjoint to the security context", the long term key of 
>> the server *is* not related to any context.
> 
> I know, but when the service ticket is analyzed the acceptor context does try 
> to find a long term key for requested principal, KVNO, and etype, no? Then 
> you can identify the long term key which has been used to established the 
> context? Is my understanding wrong?

Yes, you're right.

Do you know how other krb5 libraries do this?

Thanks,
Weijun


> 
> Michael
> 
>>> On May 6, 2024, at 1:03 PM, Osipov, Michael (IN IT IN) 
>>> <michael.osi...@innomotics.com> wrote:
>>> 
>>> On 2024-05-06 16:32, Osipov, Michael (IN IT IN) wrote:
>>>> Folks,
>>>> I have a GSS security context established and need to calculate a 
>>>> signature on data received form the client. The client submits me a 
>>>> forwarded signature calculated by the KDC (Active Directory) with the 
>>>> server's long term key from the keytab.
>>>> As far as I can see ExtendedGSSContext only exposes the server's session 
>>>> key, but not the long term key used to accept this security context.
>>>> The only way I have found working is either:
>>>>> PrincipalName name = new PrincipalName("...", 
>>>>> PrincipalName.KRB_NT_PRINCIPAL);
>>>>> EncryptionKey[] encKeys = EncryptionKey.acquireSecretKeys(name, "...");
>>>>> EncryptionKey encKey = 
>>>>> EncryptionKey.findKey(serverSignature.getType().getEType(), encKeys);
>>>> which is ugly because these are really really private classes and the key 
>>>> is disjoint with the context hoping that the KVNO matched with the key I 
>>>> have here or I need to pull in a lot of dependencies from Apache Kerby to 
>>>> get the key.
>>>> The signature calculation succeeds with additional private classes, but 
>>>> that is another story.
>>>> Any tip would be helpful. In case you ask, I want to calculate: https:// 
>>>> learn.microsoft.com/en-us/openspecs/windows_protocols/ms-pac/ 
>>>> a194aa34-81bd-46a0-a931-2e05b87d1098
>>>> Ideal solution would be of course:
>>>> Key longTermKey = (Key) 
>>>> extGssContext.inquireSecContext(InquireType.KRB5_GET_LONG_TERM_KEY);
>>>> I am on Java 8+
>>> 
>>> While this is not the ideal situation this works:
>>>> KeyTab keytab = KeyTab.getUnboundInstance(new File("..."));
>>>> KerberosPrincipal principal = new KerberosPrincipal("...", 
>>>> KerberosPrincipal.KRB_NT_PRINCIPAL);
>>>> KerberosKey[] keys = keytab.getKeys(principal);
>>> 
>>> The key still remains disjoint to the security context in terms of etype 
>>> and kvno. I also noticed a possible bug in principal name comparison I need 
>>> to check and will report separately.
>>> 
>>> Additional pointers still appreciated.
>>> 
>>> M
> 

Reply via email to