Showing posts with label Tomcat. Show all posts
Showing posts with label Tomcat. Show all posts

Tomcat: setting SSL

การ setting SSL บน Tomcat สามารถทำได้ 2 แบบ คือ โดย JSSE กับ APR ซึ่ง APR จะใช้ OpenSSL เป็น engine ซึ่งมีความเป็น standard มากกว่า ไม่ติดว่าจะต้องเป็น Java เท่านั้น แต่ทั้งนี้การใช้ APR จะต้องใช้คู่กับ certificate file หรือ CA (certification authority) และไฟล์นี้ได้จากการขอผ่านทาง VeriSign หรือเวปอื่นๆ ที่ทำหน้าที่นี้โดยเฉพาะ เพื่อแสดงตัวตนของ server

ในที่นี้เราจึงขอข้ามไปไม่กล่าวถึง (เนื่องจากก็ยังไม่เคยลองทำจริงๆ เหมือนกันฮับ) ดังนั้นเรามาลอง set สำหรับใช้กันเล่นๆ ดูก่อนละกันนะค่ะ โดยใช้ JSSE ซึ่งทำได้ไม่ยากเลย สำหรับ JSSE เราก็ใช้คู่กับไฟล์เหมือนกัน แต่เป็นไฟล์ที่เรียกกันว่า keystore ซึ่งสำหรับคนที่ใช้ java อยู่แล้วจะมี tool ที่มากับ java ที่ใช้ในการสร้างไฟล์นี้ โดยใช้คำสั่ง

%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA
จากนั้นใส่ password เป็น changeit (ซึ่งเป็น password default ที่ใช้กับ tomcat)

C:\Program Files\Java\jdk1.6.0_10\bin>keytool -genkey -alias tomcat -keyalg RSA
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]:
What is the name of your organizational unit?
[Unknown]:
What is the name of your organization?
[Unknown]:
What is the name of your City or Locality?
[Unknown]:
What is the name of your State or Province?
[Unknown]:
What is the two-letter country code for this unit?
[Unknown]:
Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
[no]: y

Enter key password for
(RETURN if same as keystore password):

ซึ่ง keytool จะทำการสร้างไฟล์ที่ชื่อ .keystore ไว้ที่ home directory ของเรา ในกรณีของ Windows มันก็จะสร้างไว้ที่ C:\Documents and Settings\username ซึ่ง Tomcat จะไปหาไฟล์ .keystore ที่ home directory โดย default ซึ่งเราไม่จำเป็นต้องกำหนดอะไรเพิ่มเติมอีก

หลังจากที่ได้ keystore มาแล้ว เราก็มาแก้ configuration ของ Tomcat เพื่อให้สามารถใช้ SSL ได้ โดยเพิ่ม config ในส่วนด้านล่างในไฟล์ conf\server.xml ซึ่งอยู่ใน Tomcat directory อีกที

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />

สำหรับกรณีที่เราต้องการวาง .keystore ไว้ที่อื่นที่ไม่ใช่ home directory จะต้องมีการกำหนดเพิ่ม keystoreFile และ keystorePass attribute เ้ข้าไป เช่น

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile=" E:\Program Files\Apache Software Foundation\Tomcat6.0\conf\.keystore"
keystorePass="changeit"
clientAuth="false" sslProtocol="TLS" />

*แต่เท่าที่ได้ลองทำดู ดูเหมือนใช้ไม่ได้ เหมือนกับ Tomcat ไม่ได้สนใจ keystoreFile กับ keystorePass เลย ไม่แน่ใจเหมือนกันว่าทำอะไรผิดหรือเปล่า ก็ลองทำดูนะค่ะ แล้วมาบอกกันบ้างก็จะดี อิอิ

เท่านี้ก็เป็นอันเสร็จในส่วนของ Tomcat แต่สำหรับ ตัว web application ซึ่งถ้่าเราอยากให้ web เราใช้ SSL จะต้องกำหนดไว้ใน web.xml ด้วย โดยกำหนด tag ไว้ (สำหรับใครที่ยังไม่่เข้าใจในการ set security constraint ของ web application แนะนำให้ลองหาหนังสือมาอ่านเอานะฮับ เพราะว่าเรื่องนี้เราต้องการเน้นเรื่องการ set บน Tomcat เท่านั้น)

</security-constraint>
...
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>



Reference:
Apache Tomcat 6.0 - SSL Configuration HOW-TO
Configuring Tomcat 6 For https (SSL) Page
Setting Up SSL on Tomcat In 3 Easy Steps

Tomcat: Web Container

Web Container มีำไว้สำหรับรับ request เพื่อส่งต่อให้กับ servlet แต่ละตัว และยังช่วยการทำงานด้านอื่นๆ เพื่อให้การเขียน servlet ทำได้ง่ายขึ้น และผู้พัฒนาสามารถมุ่งไปที่ business ที่ต้องการจัดการมากกว่าจะต้องมาจัดการกับสิ่งรอบข้าง

ส่วนที่ Web container จัดการให้มีดังนี้
- Communication support ช่วยจัดการเรื่อง socket และ network ต่างๆ
- Lifecycle management จัดการ life cycle ของ servlet
- Multithreading support จัดการการทำงานของ thread เนื่องจากแต่ละ request หมายถึงการสร้าง thread 1 ตัวขึ้นมาเพื่อรับ request
- Declarative security จัดการเรื่อง security ซึ่งสามารถกำหนดได้จาก deployment descriptor (web.xml)
- JSP support


Tomcat คือเป็น web container ตัวหนึ่ง ซึ่งมีความสามารถทำงานพื้นฐานของ HTTP web server แต่ Tomcat จะทำหน้าที่นี้ไม่ได้ดีเท่า Apache (Apache ถือเป็น web server แต่ว่าไม่ได้เป็น web container)
ส่วนพวก WebLogic, Websphere, JBoss เป็น J2EE application server หรือเรียกย่อๆ ว่า application server ซึ่งสามารถทำหน้าที่ web container และ EJB container ได้ด้วย

แต่อย่างไรก็ตามสำหรับการทำงานของ Servlet สามารถใช้แค่ web container ได้ ไม่จำเป็นต้องใช้ application server

รูปด้านข้างจะแสดงโครงสร้างเวปใน Tomcat

ข้อควรรู้เสริมนิดหน่อยสำหรับการ implement JSP และ JSTL ใน Tomcat

Tomcat VersionServletJSP VersionJSTL Version
62.52.11.2
52.42.01.1

สำหรับการ config อีกเรื่องหนึ่งของ Tomcat ก็คือ Authentication ซึ่ง Tomcat ใช้ tomcat-users.xml ที่อยู่ใน conf/ directory ในการกำหนดผู้ใช้ ตัวอย่างเช่น Tomcat manager ที่เป็น web application ที่มากับ tomcat ก็จะใช้ตัวนี้ในการ Authenticate ผู้ใช้ ซึ่งผู้ที่จะใช้ web application นี้ได้จะต้องมี role เป็น manager ดังนี้

<tomcat-users>
<role rolename="manager"/>
<user username="admin" password="xxxx" roles="manager"/>
</tomcat-users>

นอกจากนี้เรายังสามารถกำหนด role และ user เพิ่มเติมได้

reference:
Jstl Tag Lib Definitions
Apache Tomcat - Which Version Do I Want?