Apache Tomcat คือ ตอนที่ 5 : ความปลอดภัย (Security)

  1. แนวคิดของการรักษาความปลอดภัยใน Apache Tomcat
  2. การรักษาความปลอดภัย Apache Tomcat ด้วย Security Manager
  3. การกำหนดค่าผู้ใช้ (Users) บทบาท (Roles) และสิทธิ์การเข้าถึง (Access Rights)
  4. การกำหนดค่า (Configuration) SSL/TLS
  5. การทำแอพที่ปลอดภัยบน Apache Tomcat

Apache Tomcat เป็นเว็บเซิร์ฟเวอร์โอเพ่นซอร์สและคอนเทนเนอร์เซิร์ฟเล็ต มีชื่อเสียงจากบทบาทในการให้บริการสภาพแวดล้อมเว็บเซิร์ฟเวอร์ HTTP บน Java ซึ่งโค้ด Java สามารถทำงานได้อย่างราบรื่น ลักษณะสำคัญขอการทำแอพใดๆ โดยเฉพาะการทำเว็บแอปพลิเคชัน คือความปลอดภัย บทความนี้จะครอบคลุมแนวคิดด้านความปลอดภัยของ Apache Tomcat วิธีรักษาความปลอดภัย Tomcat ด้วย Security Manager การกำหนดค่าผู้ใช้ บทบาท และสิทธิ์การเข้าถึง และวิธีการตั้งค่า SSL/TLS

1. แนวคิดของการรักษาความปลอดภัยใน Apache Tomcat

ก่อนเจาะลึกความซับซ้อนของการกำหนดค่าความปลอดภัยสำหรับ Apache Tomcat สิ่งสำคัญคือต้องเข้าใจแนวคิดพื้นฐานของการรักษาความปลอดภัยในสภาพแวดล้อม Tomcat พื้นที่หลักที่เกี่ยวข้องกับการรักษาความปลอดภัยใน Tomcat ได้แก่: การรักษาความปลอดภัยทรัพยากรระบบจากการเข้าถึงโดยไม่ได้รับอนุญาต การรับรองการส่งข้อมูลที่ปลอดภัย และการป้องกันการโจมตีที่เป็นอันตราย

ตัวอย่างเช่น การทำเว็บแอปพลิเคชันอาจมีส่วนที่ควรเข้าถึงได้เฉพาะผู้ใช้ที่ลงทะเบียน ในขณะที่ส่วนอื่นๆ อาจเข้าถึงได้อย่างอิสระ ความแตกต่างนี้ทำได้โดยการกำหนดค่าการควบคุมการเข้าถึง ข้อมูลที่ส่งผ่านเครือข่ายควรมีความปลอดภัย โดยเฉพาะข้อมูลที่ละเอียดอ่อน เช่น ข้อมูลรับรองผู้ใช้ นี่คือที่มาของเทคโนโลยีการเข้ารหัส เช่น SSL/TLS นอกจากนี้ แอปพลิเคชันควรได้รับการออกแบบและกำหนดค่าให้ต้านทานเวกเตอร์การโจมตีทั่วไป เช่น Cross-Site Scripting (XSS) หรือ SQL Injection

2. การรักษาความปลอดภัย Apache Tomcat ด้วย Security Manager

Apache Tomcat มีตัวเลือกในการทำงานโดยเปิดใช้งาน Security Manager ซึ่งสามารถเพิ่มความปลอดภัยให้กับแอปพลิเคชันที่ทำงานบนนั้นได้อย่างมาก Security Manager ทำงานโดยให้สิทธิ์แก่รหัสบางอย่างในขณะที่จำกัดรหัสอื่นๆ ตามนโยบายความปลอดภัยที่กำหนดไว้ในไฟล์การกำหนดค่า

หากต้องการเปิดใช้งาน Security Manager คุณต้องเพิ่มตัวเลือก “-security” ในสคริปต์เริ่มต้น Tomcat คุณควรกำหนดไฟล์นโยบายที่ระบุสิทธิ์สำหรับรหัสต่างๆ โปรดจำไว้ว่า การนำ Security Manager ไปใช้อาจต้องอัปเดตสิทธิ์ในไฟล์นโยบายเมื่อคุณปรับใช้แอปพลิเคชันใหม่หรืออัปเดตแอปพลิเคชันที่มีอยู่

3. การกำหนดค่าผู้ใช้ (Users) บทบาท (Roles) และสิทธิ์การเข้าถึง (Access Rights)

การทำแอพด้วยการตรวจสอบสิทธิ์ผู้ใช้ใน Apache Tomcat มีหลายขั้นตอน ขั้นแรก คุณต้องกำหนดผู้ใช้ บทบาท และสิทธิ์การเข้าถึงของผู้ใช้ จากนั้น คุณกำหนดค่าตัวอธิบายการปรับใช้เว็บของแอปพลิเคชัน (web.xml) เพื่อจำกัดการเข้าถึงทรัพยากรบางอย่าง

ในการกำหนดผู้ใช้และบทบาท คุณต้องแก้ไขไฟล์ tomcat-users.xml ที่อยู่ในไดเร็กทอรี conf ของ Tomcat ตัวอย่างการกำหนดค่าผู้ใช้จะมีลักษณะดังนี้:

<tomcat-users>
    <role rolename="admin"/>
    <role rolename="user"/>
    <user username="admin" password="password" roles="admin"/>
    <user username="johndoe" password="doepassword" roles="user"/>
</tomcat-users>

ในการกำหนดค่านี้ มีการสร้างสองบทบาท: “ผู้ดูแลระบบ” และ “ผู้ใช้” มีการสร้างผู้ใช้สองคน: “admin” ที่มีบทบาท “admin” และ “johndoe” ที่มีบทบาท “user”

ในการบังคับใช้การควบคุมการเข้าถึงในแอปพลิเคชัน คุณต้องกำหนดค่าข้อจำกัดด้านความปลอดภัยในไฟล์ web.xml ของการทำแอพของคุณ นี่อาจมีลักษณะดังนี้:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Admin Area</web-resource-name>
        <url-pattern>/admin/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
</security-constraint>

ในการกำหนดค่านี้ การเข้าถึง URL ใดๆ ภายใต้ “/admin/” จะจำกัดเฉพาะผู้ใช้ที่มีบทบาท “admin”

4. การกำหนดค่า (Configuration) SSL/TLS

การรักษาความปลอดภัยข้อมูลระหว่างไคลเอนต์และเซิร์ฟเวอร์เป็นสิ่งสำคัญสำหรับการทำเว็บแอปพลิเคชันใดๆ Tomcat รองรับการใช้ SSL/TLS เพื่อเข้ารหัสการรับส่งข้อมูล การกำหนดค่า SSL/TLS สำหรับ Tomcat เกี่ยวข้องกับการสร้างใบรับรอง การเปิดใช้งานตัวเชื่อมต่อ HTTPS และการระบุใบรับรองในไฟล์การกำหนดค่า server.xml

ต่อไปนี้คือตัวอย่างวิธีกำหนดค่าตัวเชื่อมต่อ SSL/TLS ใน Tomcat:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="conf/localhost.jks"
                     type="RSA" />
    </SSLHostConfig>
</Connector>

ในการกำหนดค่านี้ มีการตั้งค่าตัวเชื่อมต่อบนพอร์ต 8443 ที่ใช้โปรโตคอล SSL/TLS สำหรับการเชื่อมต่อที่ปลอดภัย ไฟล์ที่เก็บคีย์ “localhost.jks” ที่มีคีย์ส่วนตัวและคีย์สาธารณะของเซิร์ฟเวอร์ใช้สำหรับการเข้ารหัส

5. การทำแอพที่ปลอดภัยบน Apache Tomcat

การทำแอพบน Tomcat เกี่ยวข้องกับการทำงานร่วมกันของคอมโพเนนต์ต่างๆ รวมถึง Servlets, JSP และไฟล์คอนฟิกูเรชันต่างๆ อย่างไรก็ตาม การทำแอพที่ปลอดภัยจะเพิ่มขั้นตอนอีกสองสามขั้นตอนให้กับกระบวนการนี้

สมมติว่าเรากำลังทำเว็บแอปพลิเคชันอย่างง่ายด้วยพื้นที่ผู้ดูแลระบบที่ปลอดภัย เราได้กำหนดผู้ใช้ บทบาท และการควบคุมการเข้าถึงไว้ก่อนหน้านี้แล้ว ทีนี้มาดูว่าเราจะจัดโครงสร้างแอปพลิเคชันอย่างไร:

  1. Servlets และ JSP:เราจะมีหน้าเข้าสู่ระบบ หน้าสาธารณะ และหน้าผู้ดูแลระบบ หน้าเข้าสู่ระบบจะจัดการกระบวนการเข้าสู่ระบบ หน้าสาธารณะจะสามารถเข้าถึงได้โดยผู้ใช้ทุกคน และหน้าผู้ดูแลระบบจะเข้าถึงได้เฉพาะผู้ใช้ที่เป็นผู้ดูแลระบบเท่านั้น
  2. web.xml:ไฟล์นี้จะกำหนด Servlets และ JSP และระบุข้อจำกัดด้านความปลอดภัยด้วย การกำหนดค่าการเข้าสู่ระบบอาจมีลักษณะดังนี้:
<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.jsp</form-login-page>
        <form-error-page>/error.jsp</form-error-page>
    </form-login-config>
</login-config>

การกำหนดค่านี้ระบุว่าวิธีการรับรองความถูกต้องเป็นแบบอิงตามแบบฟอร์ม และระบุหน้าสำหรับการเข้าสู่ระบบและการจัดการข้อผิดพลาดในการเข้าสู่ระบบ

  1. การปรับใช้:เมื่อสร้างแอปพลิเคชันแล้ว จะต้องปรับใช้กับเซิร์ฟเวอร์ Tomcat สิ่งนี้เกี่ยวข้องกับการบรรจุแอปพลิเคชันลงในไฟล์ WAR และปรับใช้ผ่านแอพ Tomcat’s Manager หรือคัดลอกไปยังไดเร็กทอรี webapps ของ Tomcat

เมื่อนำองค์ประกอบทั้งหมดเหล่านี้มารวมกัน เราก็มีแอปพลิเคชันที่ปลอดภัยซึ่งทำงานบน Apache Tomcat ที่ใช้การรับรองความถูกต้องของผู้ใช้และการเข้ารหัส SSL/TLS สำหรับการส่งข้อมูลที่ปลอดภัย


แม้ว่ากระบวนการอาจดูซับซ้อนในตอนแรก แต่ขั้นตอนในการทำแอพที่ปลอดภัยใน Apache Tomcat นั้นตรงไปตรงมาเมื่อคุณเข้าใจแนวคิด ซึ่งเกี่ยวข้องกับการทำความเข้าใจกลไกการรักษาความปลอดภัยของ Tomcat การใช้ Security Manager การกำหนดผู้ใช้และบทบาท การตั้งค่า SSL/TLS และการรวมส่วนประกอบเหล่านี้เข้ากับแอปพลิเคชัน เมื่อปฏิบัติตามขั้นตอนเหล่านี้อย่างระมัดระวัง คุณจะมั่นใจได้ว่าแอปพลิเคชันของคุณจะรักษาระดับความปลอดภัยสูงสุด


Apache Tomcat คืออะไร

Apache Tomcat คือ ตอนที่ 4 : Tomcat Manager
Apache Tomcat คือ ตอนที่ 6 : Connectors คืออะไร