ฉันกำลังพยายามตั้งค่า SSO บนเว็บเซิร์ฟเวอร์ Apache ของฉันโดยใช้ Kerberos เพื่อให้ผู้ใช้ที่เข้าสู่ระบบโดเมนท้องถิ่นเป็นที่รู้จักและเข้าสู่ระบบทันที

ฉันได้ทำตามคำแนะนำนี้กับจดหมายแล้ว แต่ฉันไม่สามารถกำจัดข้อความแจ้งผู้ใช้/รหัสผ่านได้เมื่อตั้งค่าทุกอย่างแล้ว

ฉันใช้ Ubuntu 8.04 ได้ติดตั้ง mod_auth_kerb 5.4 สำหรับ Apache แล้ว

/etc/krb5.conf ของฉัน:

[libdefaults]
  default_realm = COMPANY.LOCAL
[domain_realm]
  .company.local = COMPANY.LOCAL
  company.local = COMPANY.LOCAL
[realms]
  COMPANY.LOCAL = {
    default_domain = company.local
    kdc = DC01.COMPANY.LOCAL:88
    admin_server = DC01.COMPANY.LOCAL
  }

การกำหนดค่า Apache ของฉัน:

<Location />
AuthType Kerberos
AuthName "server login"
KrbMethodNegotiate On
KrbMethodK5Passwd On
KrbAuthRealms COMPANY.LOCAL
KrbServiceName HTTP
Krb5KeyTab /etc/apache2/httpd.keytab
KrbVerifyKDC off
KrbLocalUserMapping on
require valid-user
</Location>

ผู้ดูแลระบบของเราสร้าง Keytab โดยใช้

ktpass -princ HTTP/[email protected] -mapuser hostname -crypto rc4-hmac-nt -ptype KRB5_NT_SRV_HST -pass CHOOSEPASSWORD -out httpd.keytab

ฉันได้ออกคำสั่ง chmod/chown ที่เกี่ยวข้องแล้ว บนเซิร์ฟเวอร์ ฉันออกkinit HTTP/[email protected]และเข้าสู่ระบบสำเร็จแล้ว

kvno/ klistผลลัพธ์:

# kvno HTTP/[email protected]
HTTP/[email protected]: kvno = 8
# klist -ke httpd.keytab
Keytab name: FILE:httpd.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   8 HTTP/[email protected] (ArcFour with HMAC/md5)

ฉันได้กำหนดค่าเบราว์เซอร์ของฉัน (ลองทั้ง ff และ ie บน windows7) เพื่อส่งข้อมูลประจำตัวไปพร้อม ๆ กันเพื่อหวังว่าจะกำจัดพรอมต์ แต่มันไม่ทำงาน

บันทึกข้อผิดพลาด Apache กำลังพูดว่า:

[error] [client 10.0.0.1] gss_accept_sec_context() failed: Unspecified GSS failure.  Minor code may provide more information (, Key version number for principal in key table is incorrect)
[error] [client 10.0.0.1] gss_accept_sec_context() failed: Invalid token was supplied (, No error)

มีใครมีข้อเสนอแนะใด ๆ เกี่ยวกับสิ่งที่ฉันต้องการให้ทำงาน

answer

หากฉันตีความข้อผิดพลาดถูกต้อง ฉันคิดว่านั่นหมายความว่าคุณมีคีย์เวอร์ชันเก่าใน /etc/apache2/httpd.keytab ทุกครั้งที่มีการเปลี่ยนแปลงคีย์สำหรับหลักการ Kerberos ผ่าน kadmin หมายเลขเวอร์ชันจะเพิ่มขึ้นและเวอร์ชันเก่าของคีย์นั้นจะใช้งานไม่ได้

kinitคำสั่ง / เข้าสู่ระบบเพียงแสดงให้เห็นว่าภายในคีย์โฮสต์ของ /etc/krb5.keytab เป็นเหมือนเดิม ไม่ได้หมายความว่า kvno ภายใน httpd.keytab นั้นถูกต้อง และคุณจะต้องตรวจสอบกับ KDC

เริ่มเซสชัน kadmin กับ KDC ของคุณและเรียกใช้getprinc <principalname>ไฟล์. มองหา "คีย์: vno" ซึ่งจะบอกคุณว่า KDC ถือเป็นหมายเลขเวอร์ชันอะไร หาก KDC มีคีย์เวอร์ชันที่ใหม่กว่า คุณจะต้องเอ็กซ์พอร์ตคีย์นี้อีกครั้งไปยังโฮสต์ที่เป็นปัญหา ฉันจะตรวจสอบความถูกต้องของคีย์ทั้งหมดใน /etc/krb5.keytab ในขณะที่คุณใช้งานเพื่อให้แน่ใจว่าจะไม่มีการทิ้งระเบิดเวลาอื่นแอบแฝงอยู่

หวังว่านี่จะช่วยได้!