วันพฤหัสบดีที่ 30 มิถุนายน พ.ศ. 2559

การสร้าง self-signed certificate สำหรับเว็ปไซต์ของท่าน

การสร้าง self-signed certificate สำหรับเว็ปไซต์ของท่าน

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

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

ในทางปฏิบัติ  หลายเว็ปไซต์มิได้ทำการติดต่อขอรับบริการดังกล่าว  แต่อาศัยการสร้าง certificate นี้ขึ้นมาเอง  โดยเมื่อบราวเซอร์เข้าเรียกใช้เว็ปของเราในโปรโตคอล HTTPS ในครั้งแรก จะมีการเตือนให้ผู้ใช้ทราบว่า  cerfiticate นี้มิได้รับรองโดยบริษัทที่ดูแลเรื่องนี้โดยตรง  ซึ่งหากเป็นเว็ปเซอร์เวอร์ที่ใช้กันภายในองค์กร  เราก็สามารถส่งไฟล์ certificate นี้ไปติดตั้งยังเครื่องต่างๆ ได้โดยผู้ใช้ติดตั้งเอง  หรือเราอาจจะบอกข้อมูลเบื้องต้นที่มีอยู่ใน certificate นั้นให้ผู้ใช้ตรวจสอบเองได้ก่อนทำการติดตั้ง  และเมื่อผู้ใช้ติดตั้ง certificate ลงไปแล้ว ก็จะสามารถใช้งานเว็ปไซต์เดิมในภายหลังได้โดยไม่มีการร้องเตือนเรื่อง certificate อีก



การสร้าง self-signed certificate
ก่อนอื่น  เราจะทำการสร้าง certificate สำหรับเว็ปเซอร์เวอร์  คอมพิวเตอร์ที่เราจะใช้สร้าง certificate จะต้องมี OpenSSL ติดตั้งอยู่ก่อนแล้ว ในกรณีที่ ใช้บนลินุกซ์  ดิสตริบิวชันปัจจุบันมักจะติดตั้งมาให้แล้ว และเราสามารถใช้ได้ทันที   โดยขั้นตอนการใช้งาน openssl เพื่อสร้าง self-signed certificate มีดังนี้

1)  สร้าง RSA private key ทำได้โดยใช้คำสั่ง

openssl genrsa -des3 -out ชื่อเซอร์เวอร์.key 1024


ในที่นี้เรากำหนดการเข้ารหัสแบบ Triple-DES  และคีย์มีขนาด 1024 บิต ใน PEM format  เราจะต้องกำหนดชื่อเซอร์เวอร์ เป็นชื่อเซอร์เวอร์ของเว็ปไซต์ของเรา  อาทิเช่น เว็ปนี้คือ thanwa.cpe.mut.ac.th  ชื่อจะต้องเป็น thanwa.cpe.mut.ac.th.key   ซึ่งจะได้ว่า

openssl genrsa -des3 -out thanwa.cpe.mut.ac.th.key 1024

สำหรับคนที่มีเซอร์เวอร์มากมายใช้โดเมนร่วมกัน เราอาจจะสร้าง certificate ที่ใช้ร่วมกันทั้งโดเมนก็ได้  สมมติว่าผมต้องการสร้าง certificate สำหรับ เซอร์เวอร์ทุกตัวที่ลงท้ายด้วย cpe.mut.ac.th   ผมก็จะใช้คำสั่งดังนี้

openssl genrsa -des3 -out *.cpe.mut.ac.th.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 (หรือถ้าขึ้นต้นด้วย * ก็จะมี * นำหน้า เช่น *.cpe.mut.ac.th.key เป็นต้น)  

2) ปลดพาสเวิร์ดออกจาก key ของเราเอง  เนื่องจากในที่นี้  เราเป็นคนที่สร้างคีย์เอง และใช้คีย์นี้คนเดียว โดยไม่มีผู้อืี่นจะมายุ่มย่ามกับคีย์ของเรา (เราเก็บไว้ในที่ปลอดภัย) เราก็ถือโอกาสปลดพาสเวิร์ดออกเสียเลย

openssl rsa -in ชื่อเซอร์เวอร์.key -out ชื่อเซอร์เวอร์.key

โปรแกรมจะทำการแสดงข้อความเพื่อให้เรายืนยันรหัสดังนี้

Enter pass phrase for ชื่อเซอร์เวอร์.keyใส่รหัสผ่านลงไปครับ
writing RSA key

3) สร้างไฟล์ CSR (Certificate Signing Request)  จากนั้นเราจึงสร้างไฟล์ที่เราจะแทรกรายละเอียดต่างๆ เกี่ยวกับเว็ปไซต์ของเราลงไป เพื่อในเวลาที่ผู้ใช้เปิดเว็ปของเรา  จะสามารถตรวจสอบรายละเอียดเบื้องต้นเกี่ยวกับเว็ปไซต์ของเราได้

เราใช้คำสั่ง

openssl req -new -key ชื่อเซอร์เวอร์.key -out ชื่อเซอร์เวอร์.csr

โปรแกรมจะทำการสร้าง CSR ไฟล์ให้โดยมีการแสดงข้อความและถามข้อมูลเพิ่มเติมดังต่อไปนี้

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]:ใส่จังหวัด ในที่นี้อย่างเช่น Bangkok
Locality Name (eg, city) [Newbury]:ใส่ชื่อเมืองหรืออำเภอ ในที่นี้ผมใส่เขตหนองจอก Nong Chock
Organization Name (eg, company) [My Company Ltd]:ใส่ชื่อองค์กรของเว็ปไซต์  ตัวอย่างเช่น โดเมนนี้สังกัด ม.เทคโนโลนีมหานคร ผมจึงใส่ Mahanakorn University of Technology
Organizational Unit Name (eg, section) []:ใส่ชื่อหน่วยงานภายใน กรณีนี้ผมกำหนดว่าเป็นเว็ปไซต์ของผม Thanwa's Home Page
Common Name (eg, your name or your server's hostname) []:ใส่ชื่อเซอร์เวอร์เลยครับ อย่างเช่น thanwa.cpe.mut.ac.th
Email Address []:ใส่อีเมลแอดเดรสสำหรับให้ติดต่อสอบถาม

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ในกรณีที่เราต้องการให้ผู้ใช้กรอกพาสเวิร์ด เราจะต้องใส่ที่นี่่ด้วยครับ  ปกติเราจะปล่อยว่างไ้ว้ (กด ENTER ต่อไปเลยครับ)
An optional company name []: หากต้องการใส่รายละเอียดเพิ่มเติมเกี่ยวกับบริษัทอีกเล็กน้อย ก็ใส่ได้ ปกติผมจะปล่อยว่างไว้

4) สร้าง Self-signed certificate เพื่อไว้ให้บราวเซอร์มาอ่านไป  เราใช้คำสั่งดังนี้

openssl x509 -req -days จำนวนวันก่อนหมดอายุนับจากวันที่สร้าง -in ชื่อเซอร์เวอร์.csr -signkey ชื่อเซอร์เวอร์.key -out ชื่อเซอร์เวอร์.crt

โปรแกรมจะทำการสร้างไฟล์ CRT ให้เรา เป็นอันเรียบร้อย


การบรรจุ self-signed certificate ลงในเว็บเซอร์เวอร์
จากนั้น  เราจะทำการเซ็ตเว็ปเซอร์เวอร์ให้ทำการอ่าน certificate ที่เราสร้างขึ้นนี้  สำหรับเว็ปเซอร์เวอร์ Apache บนลินุกซ์นั้น  ไฟล์ที่เราต้องแก้ไขคือ
/etc/httpd/conf.d/ssl.conf  ให้มองหาพารามิเตอร์สองตัวต่อไปนี้คือ  SSLCertificateFile และ SSLCertificateKeyFile  และแก้เป็นดังนี้

SSLCertificateFile ไดเรกตอรีและชื่อไฟล์.crt

ตัวอย่างเช่น ผมนำเอาไฟล์ .crt ไปไว้ในไดเรกตอรี /etc/httpd/conf ผมจะต้องเรียกใช้ดังนี้

SSLCertificateFile /etc/httpd/conf/thanwa.cpe.mut.ac.th.crt

และอีกที่หนึ่ง

SSLCertificateKeyFile ไดเรกตอรีและชื่อไฟล์.key

ดังเช่น

SSLCertificateKeyFile /etc/httpd/conf/thanwa.cpe.mut.ac.th.key

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

ไม่มีความคิดเห็น:

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