A keytab file is used to hold the SPN credentials for communicating with the KDC or AD Domain Controller.
This file contains sensitive information used by the BMC Atrium Single Sign-On servers when working with the Key Distribution Center (KDC) and Active Directory (AD).
The Kerberos protocol defines how clients interact with a network authentication service.
In this context, we shall look into the procedure of creating keytab file for Kerberos.
How to create a Keytab File for Kerberos Authentication in Active Directory ?
Linux services like Apache, Nginx, etc can use keytab files for Kerberos authentication in Active Directory without entering any password.
The keytab file keeps the names of Kerberos principals and the corresponding encrypted keys.
Now let's take a look at how our Support Experts create a keytab file.
i. First, we create a service account in AD and set a known password for it:
New-ADUser -Name "web" -GivenName "nginx web app" -SamAccountName "web" -UserPrincipalName "firstname.lastname@example.org" -Path "OU=Services,OU=Munich,OU=DE,DC=test,DC=com" –AccountPassword (ConvertTo-SecureString “Sup6r!Pa$s” -AsPlainText -force) -Enabled $true
ii. Next, we enable "User cannot change password" and "Password never expires" options for the service account in the graphic console or in PowerShell:
Get-ADUser web|Set-ADUser -PasswordNeverExpires:$True -CannotChangePassword:$true
Then, we bind a service principal name (SPN) to the user account.
We need not perform this step separately since ktpass does it automatically when creating a keytab file (Here, we will do it so that you understand the process better).
iii. Now, we bind the following SPN record to the web account:
setspn -A HTTPemail@example.com web
iv. Then, we display the list of SPN records that associates with the AD user:
setspn -L web
v. To create a keytab file, we use the below command:
ktpass -princ HTTP/www.test.com@TEST.COM -mapuser web -crypto ALL -ptype KRB5_NT_PRINCIPAL -pass Sup6r!Pa$s -target mundc01.test.com -out c:\share\web.keytab
vi. Now, the command creates a keytab file (c:\share\webt.keytab) for the SPN record of the HTTPfirstname.lastname@example.org service.
The SPN record is bound to the web account with the specified password.
vii. We make sure that the SPN record for the service has been successfully created (if you did not create it manually):
setspn -Q */email@example.com
Windows do not have built-in tools to view the contents of the keytab file.
However, if Java JRE is present on the computer, we can use klist.exe included in the Java distribution package:
cd "c:\Program Files\Java\jre1.8.0_181\bin"
klist.exe -K -e -t -k c:\PS\web_host.keytab
How to resolve Common Errors experienced in the process of Creating a Keytab File for Kerberos Authentication in Active Directory ?
We had a customer with the below error message. He came across this error message while executing ktpass command to create a keytab file in Kerberos authentication using ktpass command for Kerberos:
Command: ktpass /princ HTTP/fqhostname@DOMAIN.COM /ptype krb5_nt_principal /crypto all /mapuser DOMAIN\serviceaccount /out bob.keytab -kvno 0 /pass password
Targeting domain controller: domaincontroller.Domain.com
Successfully mapped HTTP/fqhostname to serviceaccount
Password set failed! 0x00000035
The above error arises if the service account's password does not meet the domain's password policy.
To resolve this error, simply reset the account's password by following the current domain's password policy and re-run the ktpass command.