Long LiveThe King
ข้าพเจ้าไม่ได้มีพรสวรรค์พิเศษอะไร ข้าพเจ้าเพียงแต่มีความกระหายใคร่รู้อยู่เสมอ ทุ่มเทให้กับสิ่งที่อยากรู้ พากเพียรอย่างทรหด และสำรวจวิจารณ์ความรู้ของตัวเองเป็นประจำ ปัจจัยเหล่านี้คือที่มาของแนวคิดต่างๆ ของข้าพเจ้า .... อัลเบิร์ต ไอน์สไตน์

วันพฤหัสบดีที่ 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

0 ความคิดเห็น:

แสดงความคิดเห็น



:) :( ;) :D :-/ :x :P :-* =(( :-O X( :7 B-) #:-S :(( :)) =)) :-B :-c :)] ~X( :-h I-) =D7 @-) :-w 7:P 2):) :!! m/ :-q :-bd ^#(^

© Ubuntu, AllRightsReserved.

ขับเคลื่อนโดย Blogger Designed by Nikhorn Thongchuay