การติดตั้ง Shibboleth Single Sign-On
ตอนที่ 9 - ติดตั้ง LDAP และต่อกับ LDAP

13. ติดตั้ง Apache Directory Service (LDAP)

เพื่อใช้งาน LDAP ให้ติดตั้ง Apache DS โดยไปดับเบิลคลิกไฟล์ apacheds-1.5.4-setup.exe
รูปภาพ 51 ดับเบิลคลิกไฟล์ apacheds-1.5.4-setup.exe เพื่อติดตั้งระบบ LDAP
คลิกปุ่ม Next > ไปจนถึงหน้าที่ให้กำหนดตำแหน่งโฟลเดอร์
รูปภาพ 52 เลือกติดตั้ง Apache Directory Service ไว้ที่ c:\sso\apacheds
คลิกปุ่ม Next > ไปถึงหน้าที่ให้กำหนดตำแหน่งที่วาง JDK
รูปภาพ 53 ชี้ที่วาง JDK ไปที่ c:\sso\setup\jdk1.6.0_10\
คลิกปุ่ม Install เพื่อดำเนินการติดตั้ง จนกระทั่งถึงขั้นตอนสุดท้ายคลิกปุ่ม Finish สิ้นสุดการติดตั้ง
รูปภาพ 54 ถามว่าจะสตาทร์ Apache Directory Service ไว้ทันทีหรือไม่ ให้ตอบว่า Yes

13.1 ติดตั้ง Apache Directory Studio

เพื่อให้เราสามารถเปิดดูข้อมูลที่เก็บอยู่ใน LDAP ได้ ให้ติดตั้งโปรแกรม Apache Directory Studio โดยดับเบิลคลิกที่ไฟล์ ApacheDirectoryStudio-win32-1.3.0.v20081020.exe เมื่อปรากฏ Setup Wizard ที่หน้าระบุตำแหน่งที่วาง ให้ติดตั้งไว้ที่โฟลเดอร์ c:\sso\Apache Directory Studio ดังนี้
รูปภาพ 55 ติดตั้ง Apache Directory Studio ไว้ที่ c:\sso\Apache Directory Studio
คลิกปุ่ม Install และรอจนกระทั่ง Finish แล้วไปสตาทร์โปรแกรม Apache Directory Studio โดยดับเบิลคลิกไฟล์ Apache Directory Studio.exe ที่ตำแหน่ง c:\sso\Apache Directory Studio จะปรากฏหน้าต่างโปรแกรมขึ้นมาดังนี้
รูปภาพ 56 โปรแกรม Apache Directory Studio

13.2 เชื่อมต่อ LDAP ตรวจสอบข้อมูล

ที่โปรแกรม Apache Directory Studio ไปที่เมนู LDAP เลือกคำสั่ง New Connection ...
รูปภาพ 57 ใส่ชื่อ Connection Name:, Hostname: และ Port เป็น 10389
ระบุ Connection name: เป็น 127.0.0.1 และ Hostname: เป็น 127.0.0.1 และ Port: เป็น 10389 คลิกปุ่ม Next >
รูปภาพ 58 ใส่ user: เป็น uid=admin,ou=system และ Bind password: เป็น secret
เมื่อกดปุ่มตกลงจะเชื่อมต่อไปที่ ApacheDS และปรากฏข้อมูลดังนี้
รูปภาพ 59 ปรากฏหน้าต่าง LDAP Browser และมีรายการโหนด (Node) ของ LDAP อยู่ภายใน
สังเกตที่โหนด ou=users ภายใต้โหนด ou=system ภายใต้ Root DSE เป็นโหนดเป้าหมายที่เราจะสร้างรายชื่อผู้ใช้ใส่เข้าไป ต่อไปนี้เราจะอ้างอิงพาธ (Path) ตามวิธีการของ LDAP เช่น ถ้าอ้างถึงพาธ ou=users จะเรียกว่า ou=users,ou=system ตามลำดับชั้นของโหนดโดยใช้เครื่องหมายคอมมาคั่น

13.3 สร้างผู้ใช้ user1 และ user2 ไว้ทดสอบ

ให้คลิกขวาที่โหนด ou=users,ou=system แล้วสั่ง New Entry ... ดังนี้
รูปภาพ 60 เตรียมสร้างโหนดใหม่เป็น user ภายใต้โหนด ou=users,ou=system
เมื่อปรากฏไดอะล็อกซ์ New Entry ให้เลือกออปชันเป็น Create entry from scratch ดังนี้
รูปภาพ 61 เลือก Create entry from scratch
คลิกปุ่ม Next > ไปที่หน้าถัดไป
รูปภาพ 62 เลือกเป็น inetOrgPerson
ที่หน้า Object Classes ให้เลือก inetOrgPerson แล้วกดปุ่ม Add เพื่อเลือกไว้ที่ด้านขวามือ คลิกปุ่ม Next > ด้านล่างไปที่หน้าถัดไป
รูปภาพ 63 ใส่ uid เป็น user1
ที่หน้า Distinguished Name ใส่ RDN : ชื่อ uid มีค่าเป็น user1 คลิกปุ่ม Next > ไปที่หน้าถัดไป
รูปภาพ 64 ใส่ cn=user1 และ sn=user1
ที่หน้าถัดมาใส่ cn=user1 และ sn=user1 คลิกปุ่ม Finish จะได้โหนด uid=user1 ปรากฏออกมาดังนี้
รูปภาพ 65 เพิ่ม uid=user1 เข้าไปใน ou=users
ให้คลิกขวาที่บริเวณกรอบ Attribute ของ uid=user1 แล้วเลือกคำสั่ง New Attribute...
รูปภาพ 66 เตรียมสร้างแอททริบิวท์ใหม่ให้กับ user1 เพื่อใช้เป็นรหัสผ่าน
เลือก Attribute type: เป็น userPassword
รูปภาพ 67 เลือก Attribute type: เป็น userPassword แล้วคลิกปุ่ม Finish
คลิกที่ปุ่ม Finish ด้านล่าง จะปรากฏหน้าต่างไดอะล็อกซ์ Password Editor ให้ใส่รหัสผ่านเป็นคำว่า password
รูปภาพ 68 ใส่รหัสผ่าเป็นคำว่า password แล้วคลิกปุ่ม OK
จะได้แอททริบิวท์ userPassword เป็นข้อมูลเพิ่มเติมให้กับ user1
รูปภาพ 69 ปรากฏแอททริบิวท์ userPassword เพิ่มเติมให้กับ user1
ให้กดคีย์ CTRL + C ที่โหนด uid=user1 และไปกดคีย์ CTRL + V ที่โหนด ou=users เพื่อก็อปปี uid=user1 ออกมาเป็นโหนดใหม่
รูปภาพ 70 เมื่อก็อปปี user1 มาเป็นโหนดใหม่ ให้เปลี่ยน RDN: เป็น user2
คลิกปุ่ม OK จะได้โหนด user2 ดังนี้
รูปภาพ 71 ได้ uid=user2 มาอีกโหนด
เลือกที่ uid=user2 และเปลี่ยน cn=user2, sn=user2 ดังนี้
รูปภาพ 72 เปลี่ยน cn=user2 และ sn=user2
เมื่อเสร็จขั้นตอนนี้ถือว่าเราได้จัดเตรียม user ไว้แล้ว 2 คนคือ user1 และ user2 เราจะนำไปใช้ทดสอบล็อกอินที่ IdP ว่าสามารถเชื่อมต่อกับระบบ LDAP ได้หรือไม่

14. ทำให้ IdP ใช้งาน LDAP LoginModule

เปิดไฟล์ login.config จากโฟลเดอร์ c:\sso\shibboleth-idp ขึ้นมาแก้ไขดังนี้
รูปภาพ 73 เติมแอททริบิวท์ของ Login Module ที่ใช้เชื่อมต่อกับ LDAP ในไฟล์ login.config ให้ถูกต้อง
บันทึกไฟล์ login.config ไว้แล้วดำเนินการที่ขั้นตอนต่อไป

14.1 ทดสอบการเชื่อมต่อ IdP กับ LDAP

รีสตาทร์ทั้ง 3 ตัวคือ Shibboleth 2.0 Daemon, Apache Web Server และ Tomcat ใหม่อีกครั้ง แล้วทดลองเบราซ์ไปที่ http://127.0.0.1/secure เมื่อปรากฏหน้าเว็บสำหรับล็อกอินให้ใส่ชื่อผู้ใช้เป็น user1 และรหัสผ่านเป็น password แล้วกดปุ่ม Login
รูปภาพ 74 ใส่ Username: เป็น user1 และ Password: เป็น password
หลังจากกดปุ่ม Login ไปแล้วจะเกิดข้อผิดพลาดดังนี้
รูปภาพ 75 ทางฝั่ง SP แจ้งข้อผิดพลาดบางอย่างออกมา
สังเกตว่าแม้ว่าจะมีข้อผิดพลาดบางอย่างเกิดขึ้นแต่ IdP ได้ผ่านการตรวจสอบผู้ใช้และส่งต่อกลับไปที่ SP แล้ว ส่วนข้อผิดพลาดที่เกิดขึ้นให้เปิดดูรายละเอียดที่ไฟล์ shibd.log ที่โฟลเดอร์ c:\sso\shibboleth-sp\var\log\shibboleth  เมื่อเปิดขึ้นมาดูจะพบรายละเอียดข้อผิดพลาดเกี่ยวกับ Issuer ดังนี้
รูปภาพ 76 ข้อผิดพลาด can’t establish identity of issuer (https://127.0.0.1:8443/idp/shibboleth)
เราจะแก้ไขข้อผิดพลาดนี้ในขั้นตอนต่อไป

14.2 ตั้งชื่อของ provider ใน relying-party.xml ให้ตรงกับ idp-metadata.xml

ข้อผิดพลาดที่เกิดขึ้นในขั้นตอนที่แล้วเนื่องมาจากชื่อของ provider ที่กำหนดไว้ใน <RelyingParty> ไม่ตรงกับที่กำหนดไว้ในไฟล์ idp-metadata.xml ดังนั้นให้เปิดไฟล์ relying-party.xml จากโฟลเดอร์ c:\sso\shibboleth-idp\conf ขึ้นมาแก้ไขดังนี้
รูปภาพ 77 ชื่อ provider ผิด ไม่ตรงกับชื่อที่เขียนไว้ในไฟล์ idp-metadata.xml
ให้แก้ไขชื่อ provider เป็น urn:federation:idp ดังนี้

รูปภาพ 78 แก้ไขชื่อของ IdP Provider เป็น urn:federation:idp เพื่อให้ตรงกับชื่อ IdP ที่อยู่ในไฟล์ idp-metadata.xml
บันทึกไฟล์ relying-party.xml ไว้ แล้วรีสตาทร์ Tomcat ใหม่อีกครั้ง เบราซ์ไปที่ http://127.0.0.1/secure ควรจะปรากฏดังนี้

รูปภาพ 79 แม้ว่าจะเกิดข้อผิดพลาดแต่ IdP ได้ส่งมาที่ SP แล้วเพียงแต่ http://127.0.0.1/secure เป็นตำแหน่งที่ไม่มีอยู่จริง
แม้ว่าจะเกิดข้อผิดพลาด HTTP 404 แต่ได้แสดงให้เห็นว่า IdP ส่งต่อการทำงานมาที่ SP แล้ว และ SP พยายามจะสลับไปที่หน้า http://127.0.0.1/secure ซึ่งเป็นตำแหน่งที่ไม่อยู่จริงใน Apache Web Server

14.3 ตั้งโฟลเดอร์ชื่อว่า secure

เพื่อให้เวลาที่ IdP ส่งกลับมาที่ http://127.0.0.1/secure มีโฟลเดอร์ชื่อนี้อยู่จริง เราสามารถทดลองแบบง่ายก่อนได้โดยไปสร้างโฟลเดอร์ชื่อว่า secure ใส่ไว้ที่ c:\sso\Apache2.2\htdocs ดังนี้

รูปภาพ 80 สร้างโฟลเดอร์ secure ใส่ไว้ใน htdocs ที่เป็นรูทของ http://127.0.0.1
ให้ก็อปปีไฟล์ index.html จากโฟลเดอร์ htdocs ไปใส่ไว้ในโฟลเดอร์ secure ที่พึ่งจะสร้างขึ้นมาใหม่ ดังนี้

รูปภาพ 81 ก็อปปีไฟล์ index.html วางไว้ในโฟลเดอร์ secure
ให้ทดสอบใหม่โดยปิดหน้าต่างเบราเซอร์ปัจจุบันไป และเปิดใหม่ให้เบราซ์ไปที่ http://127.0.0.1/secure เมื่อใส่ชื่อผู้ใช้และรหัสผ่านแล้วกดปุ่ม Login ควรจะสลับไปที่หน้าเว็บดังนี้


รูปภาพ 82 ปรากฏหน้าเว็บ index.html ที่เราเตรียมไว้ แสดงว่า IdP สามารถส่งต่อมาที่ SP ได้แน่นอนแล้ว

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การติดตั้ง Shibboleth Single Sign-On
ตอนที่ 12 - การทำ SLO (Single Log-out)

ตัวอย่างการเข้ารหัส AES ด้วย Java และถอดรหัสด้วย C#.NET

การรักษาความปลอดภัยแบบ OWASP