วิธีการติดตั้ง และตั้งค่า Apache2 พร้อมเปิดใช้งาน HTTPS ด้วยวิธี Self-Sign บน Ubuntu 18.04.1 LTS

ดีจร้า วันนี้ช่วงเช้าว่างเลยมาเขียนบทความเพิ่มเติมเกี่ยวกับการติดตั้ง และตั้งค่า Apache2 ให้สามารถใช้งานผ่าน HTTPS ได้กันมาเริ่มกันเลยครับ

ขั้นแรกติดตั้ง Ubuntu 18.04.1 LTS กันถ้าใครไม่รู้วิธีก็คลิกที่นี่
ขั้นต่อไปก็ตามข้างล่างเลยครับ


sudo apt-get install apache2 openssl -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.2-0 ssl-cert
Suggested packages:
  www-browser apache2-doc apache2-suexec-pristine | apache2-suexec-custom openssl-blacklist
The following NEW packages will be installed:
  apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.2-0
  ssl-cert
0 upgraded, 10 newly installed, 0 to remove and 1 not upgraded.
Need to get 1,730 kB of archives.
...

เสร็จแล้วเราจะมาเริ่มกันที่การสร้าง certificate file ก่อนนะครับให้พิมพ์
$ sudo openssl genrsa –out server.key 1024
Generating RSA private key, 1024 bit long modulus
.........++++++
...............++++++
e is 65537 (0x010001)
...

หลังจากได้ไฟล์ server.key มาแล้วเราจะทำการร้องขอ certificate request โดยพิมพ์
$ sudo openssl req -config /etc/ssl/openssl.cnf -new -key server.key -out newcsr.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) [AU]:TH (ประเทศไทย)
State or Province Name (full name) [Some-State]: ไทยไม่มีปล่อยว่างครับ
Locality Name (eg, city) []:Bangkok ใส่จังหวัดครับ
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ใส่ชื่อหน่วยงาน หรือองค์กรลงไป
Organizational Unit Name (eg, section) []:IT-Security ใส่แผนกครับ
Common Name (e.g. server FQDN or YOUR name) []:webserver อันนี้สำคัญที่สุดใส่ชื่อของเซิฟเวอร์ที่เราจะใช้ลงไปครับ
Email Address []:ใส่อีเมลลงไปครับ

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:รหัสผ่านครับ
An optional company name []:อาจจะใส่ตัวย่อของหน่วยงาน หรือองค์กรก็ได้ครับ
...

จากนั้นเราจะสร้าง Certificate file ขึ้นมาแล้วเซฟ output เป็น server.crt นะครับ
$ sudo openssl x509 -req -days 365 -in newcsr.csr -signkey server.key -out server.crt
Signature ok
subject=C = TH, ST = Bangkok, O = X-Force_Thailand, OU = IT-Security, CN = webserver
Getting Private key
...

เสร็จแล้วให้เราทำการ config ไฟล์สำหรับเว็บไซต์ของเรานะครับ
$ sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/ชื่อเว็บไซต์.conf
ตัวอย่าง
$ sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/phaonix.conf
จากนั้นเข้าไปแก้ไขไฟล์โดยเปิดผ่าน vim หรือ nano ตามแต่สะดวกเลยครับ แล้วแก้บรรทัดตามข้อมูลด้านล่างครับ บรรทัดไหนมีอยู่แล้วก็แก้ไข บรรทัดไหนไม่มีก็เพิ่มเข้าไปซะ
$ sudo vim /etc/apache2/site-available/phaonix.conf
  1 
  2         NameVirtualHost *:443          << บรรทัดนี้ต้องเพิ่มครับ
  3                   << บรรทัดนี้ต้องแก้ครับ
  4                 ServerAdmin webmaster@localhost
  5
  6                 DocumentRoot /var/www/html          << บรรทัดนี้ต้องแก้ครับ ใส่ที่อยู่ของ path ของ website ของเราลงไปครับ
  7
 26                 SSLEngine on
 27                 SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL          << บรรทัดนี้ต้องเพิ่มครับ
 34                 SSLCertificateFile      /etc/apache2/server.crt          << ที่ ๆ เก็บไฟล์ .crt ครับ
 35                 SSLCertificateKeyFile /etc/apache2/server.key         << ที่ ๆ เก็บไฟล์ .key ครับ


เสร็จแล้วให้ดำเนินการสร้าง Sym link ของไฟล์ดังกล่าวไปไว้ที่ /etc/apache2/site-enabled/
$ sudo ln -s /etc/apache2/sites-available/ชื่อไฟล์แรกที่เราแก้ไข.conf /etc/apache2/sites-enabled/ชื่อเดียวกันกับเว็บไซต์.conf
ตัวอย่าง
$ sudo ln -s /etc/apache2/sites-available/phaonix.conf /etc/apache2/sites-enabled/phaonix.conf
...

หลังจากที่เราตั้งค่าเสร็จเรียบร้อยให้ทดลองเข้าใช้งานเว็บไซต์ดูครับว่าสามารถใช้งานแล้วตามภาพแล้วหรือไม่ ถ้าได้แล้วก็ไปต่อกันเลยครับ

แล้วทดลองเข้าใช้งานเว็บไซต์ผ่าน https ดูครับว่าผลลัพธ์เป็นแบบในภาพมั๊ย ถ้าเป็นก็ไม่ต้องตกใจนะครับเรายังไม่ได้เปิดใช้งาน SSL ครับมันไม่ขึ้นก็ถูกแล้วครับ

ทีนี้เราก็ดำเนินการเปิดใช้งาน module ssl และเปิดใช้งานเว็บไซต์กันครับ
$ sudo a2enmod ssl
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Enabling module socache_shmcb.
Enabling module ssl.
See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
  systemctl restart apache2
...
ทำการเปิดใช้งานเว็บไซต์ที่เราต้องการโดยพิมพ์
$ sudo a2ensite phaonix
Removing dangling link /etc/apache2/sites-enabled/phaonix.confEnabling site phaonix.
To activate the new configuration, you need to run:
  systemctl reload apache2
...
ทำการ reload apache2 service 
$ sudo systemctl reload apache2.service

หลังจากนั้นทดลองเข้าเว็บไซต์ผ่าน https อีกครั้งจะพบหน้าแจ้งเตือนว่าไม่ปลอดภัยเนื่องจากเราทำการ self-sign หรือทำการเซ็นใบรับรองด้วยตัวเอง ไม่มีใครเค้าเชื่อถือใบรับรองนี้ แต่เราทำขึ้นเพื่อให้การเชื่อมต่อระหว่าง Web Server กับ Web Browser ทำได้อย่างปลอดภัยขึ้นแค่นั้นเองครับ แต่ถ้าใครจะทำบน production แบบฟรี ๆ ก็ไปใช้บริการของ Let's Encrypt ได้นะครับ หรือจะเสียเงินซื้อ Cert เลยก็ได้เช่นกันครับ
คลิกปุ่มตามหมายเลขเพื่อยอมรับใบรับรองนี้แล้วไปที่หน้าเว็บจะได้รูปด้านล่างเป็นอันเสร็จพิธีครับ


ที่เหลือก็คือหากต้องการติดตั้งเว็บไซต์ก็สามารถนำไฟล์ และโฟลเดอร์ที่ต้องการไปวางไว้ที่ DocumentRoot ที่เราตั้งไว้ก็จะสามารถเปิดใช้งานเว็บไซต์ได้ทันทีครับ

แถมให้สำหรับผู้ที่ต้องการบังคับให้เปิดผ่าน https เลยตั้งแต่เข้าครั้งแรกนะครับให้ทำตามนี้ครับ
$ sudo a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
  systemctl restart apache2
$ sudo systemctl reload apache2
$ sudo vim /etc/apache2/sites-available/phaonix.conf

  1 
  2         NameVirtualHost *:80 
  3         
  4                 ServerName 192.168.33.11
  5                 DocumentRoot /var/www/html
  6                 Redirect permanent / https://192.168.33.11
  7         
  8
  9         
 10                 ServerAdmin webmaster@localhost
 11                 ServerName 192.168.33.11
 12                 DocumentRoot /var/www/html


เซฟแล้วทำการ reload apache อีกครั้งแล้วลองเข้าเว็บด้วย http ปกติมันจะ redirect ไปเข้า https อัตโนมัติครับ

สวีดัด สวัสดี

No comments:

Post a Comment

วิธีการติดตั้ง และตั้งค่า Apache2 พร้อมเปิดใช้งาน HTTPS ด้วยวิธี Self-Sign บน Ubuntu 18.04.1 LTS

ดีจร้า วันนี้ช่วงเช้าว่างเลยมาเขียนบทความเพิ่มเติมเกี่ยวกับการติดตั้ง และตั้งค่า Apache2 ให้สามารถใช้งานผ่าน HTTPS ได้กันมาเริ่มกันเลยครับ ...