วันพฤหัสบดีที่ 28 พฤศจิกายน พ.ศ. 2556
การสร้าง self-signed certificate บน Ubuntu server
เว็ปไซต์ยุคใหม่จึงหันมาใช้โปรโตคอล HTTPS ซึ่งเป็นโปรโตคอลที่ปรับปรุงขึ้นโดยรองรับการเข้ารหัส ทำให้มีความเชื่อมั่นสูงในการรับส่งข้อมูลระหว่าง บราวเซอร์ของผู้ใช้ และเซอร์เวอร์ ผ่านตัวกลางที่เราไม่ทราบว่าจะมีผู้ใดอาจดักจับข้อมูลของเราหรือไม่ เว็ปเซอร์เวอร์ปัจจุบันได้รองรับการทำงานในโปรโตคอลนี้อยู่แล้ว และการใช้งานก็เพียงแต่เซ็ตเพียงเล็กน้อยเท่านั้น มีประเด็นสำคัญอันหนึ่งก็คือ certificate ที่เราจะใช้ในการรับรองความถูกต้องที่มาของเว็ปไซต์ และใช้ในกระบวนการเข้ารหัสนั้น
โดยปกติแล้วจะมีบริษัทที่รับดูแลในเรื่องนี้อยู่ และเราสามารถใช้บริการจากบริษัทเหล่านี้ได้ ซึ่งก็จะต้องเสียค่าบริการตามสมควร
ในทางปฏิบัติ เราสามารถสร้าง certificate นี้ขึ้นมาเอง โดยเมื่อบราวเซอร์เข้าเรียกใช้เว็ปของเราในโปรโตคอล HTTPS ในครั้งแรก จะมีการเตือนให้ผู้ใช้ทราบว่า cerfiticate นี้มิได้รับรองโดยบริษัทที่ดูแลเรื่องนี้โดยตรง ดังนั้นผู้ใช้ต้องทำการติดตั้ง certificate นี้ด้วยตนเอง หรือเราอาจจะบอกข้อมูลเบื้องต้นที่มีอยู่ใน certificate นั้นให้ผู้ใช้ตรวจสอบเองได้ก่อนทำการติดตั้ง และเมื่อผู้ใช้ติดตั้ง certificate ลงไปแล้ว ก็จะสามารถใช้งานเว็ปไซต์เดิมในภายหลังได้โดยไม่มีการร้องเตือนเรื่อง certificate อีก
เริ่มสร้าง certificate
ก่อนอื่น เราจะทำการสร้าง certificate สำหรับเว็ปเซอร์เวอร์ คอมพิวเตอร์ที่เราจะใช้สร้าง certificate จะต้องมี OpenSSL ติดตั้งอยู่ก่อนแล้ว ในกรณีที่ ใช้บนลินุกซ์ ดิสตริบิวชันปัจจุบันมักจะติดตั้งมาให้แล้ว และเราสามารถใช้ได้ทันที โดยขั้นตอนการใช้งาน openssl เพื่อสร้าง self-signed certificate มีดังนี้
openssl genrsa -des3 -out ชื่อเซอร์เวอร์.key 1024
ในที่นี้เรากำหนดการเข้ารหัสแบบ Triple-DES และคีย์มีขนาด 1024 บิต ใน PEM format เราจะต้องกำหนดชื่อเซอร์เวอร์ เป็นชื่อเซอร์เวอร์ของเว็ปไซต์ของเรา ตัวอย่าง
openssl genrsa -des3 -out nikhorn.blogger.com.key 1024
ถ้ามี server หลายตัวโดเมนเดียวกันก็ใส่ * ไว้หลัง -out ตัวอย่าง
openssl genrsa -des3 -out* nikhorn.blogger.com.key 1024
โปรแกรม openssl จะแสดงข้อความมาในลักษณะดังนี้
Generating RSA private key, 1024 bit long modulus
............++++++
......................................++++++
e is 65537 (0x10001)
Enter pass phrase for ชื่อเซอร์เวอร์.key : ตรงนี้เราใส่รหัสผ่านลงไปอะไรก็ได้ครับ
Verifying Enter pass phrase for ชื่อเซอร์เวอร์.key : ใส่ยืนยันอีกครั้งหนึ่ง
จากนั้นก็ปลดพาสเวิร์ดออกจาก key ของเราเอง เนื่องจากในที่นี้ เราเป็นคนที่สร้างคีย์เอง เราก็ถือโอกาสปลดพาสเวิร์ดออกเสียเลย
openssl rsa -in ชื่อเซอร์เวอร์.key -out ชื่อเซอร์เวอร์.key
โปรแกรมจะทำการแสดงข้อความเพื่อให้เรายืนยันรหัสดังนี้
Enter pass phrase for ชื่อเซอร์เวอร์.key: ใส่รหัสผ่านลงไปครับ
writing RSA key
จากนั้นเราจึงสร้างไฟล์ CSR (Certificate Signing Request) ที่เราจะแทรกรายละเอียดต่างๆ เกี่ยวกับเว็ปไซต์ของเราลงไป เพื่อในเวลาที่ผู้ใช้เปิดเว็ปของเรา จะสามารถตรวจสอบรายละเอียดเบื้องต้นเกี่ยวกับเว็ปไซต์ของเราได้
openssl req -new -key ชื่อเซอร์เวอร์.key -out ชื่อเซอร์เวอร์.csr
โปรแกรมจะทำการสร้าง CSR ไฟล์ให้โดยมีการแสดงข้อความและถามข้อมูลเพิ่มเติม เราก็พิมพ์ข้อมูลต่อท้ายเครื่องหมาย : แล้วกด Enter ดังต่อไปนี้ครับ
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:ใส่รหัสประเทศลงไป ประเทศไทยคือ TH (ใส่ตัวอักษรใหญ่ครับ)
State or Province Name (full name) [Berkshire]:ใส่จังหวัด
Locality Name (eg, city) [Newbury]:ใส่ชื่อเมืองหรืออำเภอ
Organization Name (eg, company) [My Company Ltd]:ใส่ชื่อองค์กรของเว็ปไซต์
Organizational Unit Name (eg, section) []:ใส่ชื่อหน่วยงาน
Common Name (eg, your name or your server's hostname) []:ใส่ชื่อเซอร์เวอร์เลยครับ อย่างเช่น nikhorn.blogspot.com
Email Address []:ใส่อีเมลแอดเดรสสำหรับให้ติดต่อสอบถาม
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ในกรณีที่เราต้องการให้ผู้ใช้กรอกพาสเวิร์ด เราจะต้องใส่ที่นี่่ด้วยครับ ปกติเราจะปล่อยว่างไว้ (กด ENTER ต่อไปเลยครับ)
An optional company name []: หากต้องการใส่รายละเอียดเพิ่มเติมเกี่ยวกับบริษัทอีกเล็กน้อย ก็ใส่ได้ ปกติผมจะปล่อยว่างไว้
สร้าง Self-signed certificate เพื่อไว้ให้บราวเซอร์มาอ่านไป เราใช้คำสั่งดังนี้
openssl x509 -req -days จำนวนวันก่อนหมดอายุนับจากวันที่สร้าง -in ชื่อเซอร์เวอร์.csr -signkey ชื่อเซอร์เวอร์.key -out ชื่อเซอร์เวอร์.crt
ตัวอย่าง
openssl x509 -req -days 365 -in nikhorn.blogspot.com.csr -signkey nikhorn.blogspot.com.key -out nikhorn.blogspot.com.crt
โปรแกรมจะทำการสร้างไฟล์ CRT ให้เรา เป็นอันเรียบร้อย
จากนั้นให้ทำการ coppy ไฟล์ทั้งสองไปเก็บไว้ในแฟ้ม ssl ด้วยคำสั่ง
cp nikhorn.blogspot.com.key /etc/apache2/ssl
cp nikhorn.blogspot.com.crt /etc/apache2/ssl
จากนั้น เราจะทำการเซ็ตเว็ปเซอร์เวอร์ให้ทำการอ่าน certificate ที่เราสร้างขึ้นนี้ สำหรับเว็ปเซอร์เวอร์ Apache บนลินุกซ์นั้น ไฟล์ที่เราต้องแก้ไขคือ default-ssl พิมพ์คำสั่ง
nano /etc/apache2/sites-available/default
ให้มองหาพารามิเตอร์สองตัวต่อไปนี้คือ SSLCertificateFile และ SSLCertificateKeyFile และแก้เป็นดังนี้
SSLCertificateFile ไดเรกตอรีและชื่อไฟล์.crt
SSLCertificateKeyFile ไดเรกตอรีและชื่อไฟล์.key
ตัวอย่าง
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/nikhorn.blogspot.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/nikhorn.blogspot.com.key
จากนั้นลองรีสตาร์ด Apache ใหม่เสียเลยนะครับ ถ้า Apache สามารถเริ่มทำงานได้โดยไม่ร้องไม่บ่น แสดงว่า ใช้ได้แล้วครับ
บทความนี้ได้ทำการแก้ไขดัดแปลงข้อมูลบางส่วนจาก http://thanwa.cpe.mut.ac.th/howto/certificate/
ข้อมูลอ้างอิง
http://thanwa.cpe.mut.ac.th/howto/certificate/
http://www.fourleaftechnology.com/index.php/HowTo/how-to-generate-a-self-signed-ssl-certificate-in-ubuntu.html
:)
:(
;)
:D
:-/
:x
:P
:-*
=((
:-O
X(
:7
B-)
#:-S
:((
:))
=))
:-B
:-c
:)]
~X(
:-h
I-)
=D7
@-)
:-w
7:P
2):)
:!!
m/
:-q
:-bd
^#(^
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
0 ความคิดเห็น:
แสดงความคิดเห็น